2013-05-09 28 views
8

Tôi tạo một chuỗi mới trong một hoạt động và tôi dựa vào onPause() để ngắt chuỗi. Nếu ứng dụng của tôi bị treo, hoặc Activity bằng cách nào đó chấm dứt tồn tại, tôi muốn thread bị giết.Bật chế độ đảm bảo sẽ được gọi khi Activity không còn hoạt động?

Hoạt động/Fragment.onPause() có được đảm bảo khi được gọi khi Activity không còn hoạt động? Nếu không, làm thế nào tôi có thể đảm bảo các sợi trong câu hỏi bị giết?

Trả lời

11

Nếu ứng dụng của tôi bị treo

onPause() không được gọi ở đây, nhưng điều này không nên làm phiền bạn như toàn bộ quá trình ứng dụng của bạn không còn tồn tại, bao gồm tất cả các chủ đề bạn đã tạo (UI hay cách khác) .

Hoạt động bằng cách nào đó không còn tồn tại

onPause() sẽ được gọi bất cứ khi nào hoạt động của bạn được chuyển sang nền từ tiền cảnh, được thực hiện bằng mọi cách có thể tưởng tượng, trong đó hoạt động của bạn có thể bị đóng cửa, ngoại trừ cho ứng dụng của bạn gặp sự cố. Tuy nhiên, như tôi đã đề cập ở trên, ứng dụng bị lỗi cũng sẽ mặc định xóa chuỗi của bạn.

onPause() về bản chất được gọi là bất cứ khi nào Hoạt động của bạn không còn ở nền trước. Hoạt động của bạn có thể vẫn còn hoạt động và trong bộ nhớ sau khi onPause() được gọi, nhưng không có kịch bản nào mà tôi có thể nghĩ đến trong đó Hoạt động của bạn vẫn hoạt động và trong nền mà không cần gọi số onPause().

+0

điều gì sẽ xảy ra khi bộ nhớ yếu và hệ thống cần khôi phục bộ nhớ cho các hoạt động hiện tại trong trường hợp đó các hoạt động bị tạm dừng bị hủy (tùy theo mức độ ưu tiên)? – Raghunandan

4

Có, onPause() sẽ được gọi khi hoạt động không còn hoạt động. Giả sử một hoạt động được đóng lại thì chuỗi sự kiện sẽ là onPause() ->onStop() ->onDestroy(). Ngay cả khi hoạt động của bạn trượt vào nền khi một hoạt động khác bắt đầu hoặc khi màn hình tắt, onPause() luôn được gọi ngay cả khi hai phương thức khác không được gọi. Vì vậy, ngay cả khi hoạt động ngừng hoạt động, onPause() sẽ được gọi và chuỗi của bạn sẽ bị hủy.

Nhưng khi ứng dụng của bạn gặp sự cố, cùng với toàn bộ hoạt động của bạn, ngay cả chuỗi mà bạn đã bắt đầu sẽ được Android chăm sóc bằng cách hoàn thành tất cả.

1

Giả sử bạn có hai hoạt động A và B. Bạn điều hướng từ A đến B. Hoạt động A đi tới nền tức là hoạt động A bị tạm dừng. Hoạt động B lấy nét tức là tiền cảnh. Khi bạn bấm vào nút quay lại hoạt động B được bật từ ngăn xếp lại và hoạt động A lấy trọng tâm tức là hoạt động A hồ sơ.

Khi bạn hiển thị hộp thoại trong hoạt động, hoạt động bị tạm dừng và hộp thoại được hiển thị trên hộp thoại nút quay lại bị loại bỏ và hoạt động tiếp tục (tiền cảnh).

Khi hoạt động không còn chạy, nó đang ở chế độ nền nên nó bị tạm dừng. Tôi đồng ý với Raghav Sood về những gì xảy ra khi ứng dụng gặp sự cố.

Bạn thường nên sử dụng gọi lại onPause() để:

Dừng hoạt ảnh hoặc các hành động đang diễn ra khác có thể tiêu thụ CPU. Cam kết các thay đổi chưa được lưu, nhưng chỉ khi người dùng mong đợi các thay đổi đó sẽ được lưu vĩnh viễn khi họ rời khỏi (chẳng hạn như email dự thảo). Tài nguyên hệ thống phát hành, chẳng hạn như bộ thu phát sóng, xử lý cảm biến (như GPS) hoặc bất kỳ tài nguyên nào có thể ảnh hưởng đến tuổi thọ pin trong khi hoạt động của bạn bị tạm dừng và người dùng không cần chúng.

Lưu ý:

Nhiều tác vụ có thể được giữ trong nền cùng một lúc. Tuy nhiên, nếu người dùng đang chạy nhiều tác vụ nền cùng lúc, hệ thống có thể bắt đầu hủy hoạt động nền để khôi phục bộ nhớ, khiến trạng thái hoạt động bị mất.

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