2012-04-25 24 views
12

Tôi có một ứng dụng có hai hoạt động: "A" và "B".onDestroy() trong khi "chờ" cho onActivityResult()

"A" sử dụng startActivityForResult() để sinh ra "B" tức là nó chờ "B". Bây giờ, giả sử rằng "B" là tiền cảnh. Hệ thống Android có thể phá hủy hoạt động "A" mà không phá hủy "B" không? (Nếu có, sau đó khi "B" được hoàn thành ví dụ sau khi người dùng nhập vào, hoạt động "A" phải được tạo lại và được đặt lại nền trước bởi hệ thống Android, và tôi cần nhớ và khôi phục "A" về trạng thái UI trước đó của nó.)

Lưu ý rằng tôi không nói về quá trình giết (trường hợp khác: nếu quá trình bị giết, mọi hoạt động sẽ bị hủy và onDestroy() không được gọi hoặc không được bảo đảm gọi). Câu hỏi đặt ra là về việc liệu onDestroy() có thể thực hiện được trong khi đợi kết quả của một subactivity hay không.

Trả lời

12

Nếu Hoạt động Một bị giết bởi thời gian B kết thúc, bạn được đảm bảo rằng

  1. Một sẽ được tái tạo.
  2. A sẽ cung cấp kết quả.

Nói cách khác, A sẽ được tạo lại vào lần tiếp theo người dùng truy cập/cần nó và tại thời điểm đó, mọi kết quả đang chờ xử lý sẽ được gửi (từ B đến A). Cũng lưu ý rằng đây là lý do tại sao kết quả phải được trả về thông qua một cuộc gọi lại hoạt động đơn với mã yêu cầu số nguyên, thay vì một đối tượng gọi lại tùy ý.

+0

Cảm ơn, đó chính xác là cách tôi nghĩ, _provided_ onDestroy có thể xảy ra. Vì vậy, bạn nói nó có thể xảy ra với "A". Trong trường hợp này, tuy nhiên, "A" sẽ khởi động lại tức là tôi cũng nhận được onCreate() (và sau đó, như tài liệu nói, tôi nhận được kết quả trước onResume()), vì vậy tôi cần khôi phục trạng thái UI cũ của "A ", đúng? Ý tôi là, "B" được bắt đầu trong một menu phụ cụ thể của "A", vì vậy người dùng hy vọng rằng trạng thái giao diện người dùng của "A" là giống nhau khi "B" kết thúc như khi "B" được bắt đầu. (Tức là "A" nằm trong cùng một menu phụ như khi "B" được bắt đầu.) Nếu có, tôi cần phải duy trì trạng thái giao diện người dùng của "A" _as well_ trước khi "B" được sinh ra. –

+0

Sửa tôi nếu tôi giải thích sai câu hỏi của bạn, nhưng có vẻ như bạn đang hỏi một câu hỏi tổng quát hơn về vòng đời Activity không liên quan gì đến 'startActivityForResult'. Bạn được đảm bảo rằng kết quả sẽ được chuyển từ B sang A (cho dù A bị hủy hay không), nhưng điều này không có nghĩa là trạng thái của Hoạt động được giữ nguyên. Nếu 'onDestroy' được gọi, thì bạn có thể muốn khôi phục trạng thái của nó khi nó được tạo lại trong' onRestoreInstanceState' (hoặc 'onResume'), như trường hợp với bất kỳ Activity nào khác mà bạn sẽ gặp phải. –

+0

Tôi hy vọng hai điểm này sẽ làm cho nó rõ ràng hơn: 1. Nó phải làm với startActivityForResult, bởi vì tôi không thể chắc chắn nếu nó thiết lập một nghĩa hạn chế bổ sung trong khi _in general_ "A" có thể bị phá hủy, có lẽ nó isn ' vì vậy nếu nó chờ kết quả từ "B". (Trong trường hợp này, "tồi tệ nhất" nó có thể nhận được là một onStop()). Nhưng, dựa trên câu trả lời của bạn, việc phá hủy "B" cũng có thể xảy ra trong trường hợp này. (Tất nhiên, trong trường hợp các hoạt động trong các quá trình khác nhau, rõ ràng là phá hủy độc lập là có thể, nhưng trong trường hợp của tôi là họ đang ở trong cùng một ứng dụng/quy trình). –

Các vấn đề liên quan