Ý của bạn là gì, tại sao không gọi lại số onCreate()
?
Câu trả lời đơn giản: hoạt động của bạn không bị hủy khi màn hình tắt, vì vậy không có lý do gì để gọi lại số onCreate()
.
Khi màn hình của điện thoại tắt, hoạt động gọi lại là onPause()
của hoạt động, sau đó là onStop()
. Tuy nhiên, chỉ vì nó đạt đến onStop()
không có nghĩa là nó sẽ luôn đạt được onDestroy()
. Ít nhất là với sự hiểu biết của tôi, HĐH Android cố gắng giữ càng nhiều bộ nhớ của nó càng tốt để các ứng dụng tải lại nhanh hơn, vv (đây là một sự đơn giản hóa thực sự, nhưng tôi tin đó là ý tưởng chung). Điều đó có nghĩa là hoạt động của bạn vẫn tồn tại trong bộ nhớ khi màn hình tắt (ít nhất là lúc đầu). Chỉ khi hệ thống thực sự cần các tài nguyên mà hoạt động của bạn nắm giữ, nó sẽ gọi hoạt động của bạn là onDestroy()
. Đó là lý do tại sao trình nghe nhấp nút của bạn vẫn hoạt động khi bạn tắt màn hình. Hoạt động của bạn vẫn tồn tại trong bộ nhớ, điều đó có nghĩa là trình nghe nút của bạn cũng vẫn được đăng ký.
Tôi nghĩ điều quan trọng là chỉ ra rằng chế độ ngủ và tắt màn hình không giống nhau. Khi bạn tắt màn hình, có thể hoặc không thể chuyển sang chế độ ngủ ngay lập tức. Khi màn hình tắt nhưng nó không đi vào chế độ ngủ, CPU vẫn hoạt động và dịch vụ vẫn đang chạy. Khi điện thoại chuyển sang chế độ ngủ, nó sẽ tắt nguồn CPU, về cơ bản là "đóng băng" tất cả các quá trình, và kết quả là tất cả các services
cũng vậy. Sử dụng wakelocks ngăn điện thoại chuyển sang chế độ ngủ, đó là lý do tại sao các dịch vụ vẫn chạy trong khi màn hình của điện thoại tắt trong một khoảng thời gian dài. Nếu bạn chưa đọc nó, thì Service
reference có một số thông tin khá tốt. Nó cũng thảo luận về vòng đời của nó và cách Android ưu tiên sử dụng bộ nhớ của nó.
cuối cùng những gì bạn muốn! –
Chắc chắn, đó là những gì tôi muốn nhưng câu hỏi của tôi là những gì đang xảy ra. Nếu các trình xử lý và chủ đề không bị phá hủy, tôi chỉ có thể giả định rằng Android (hoặc phần cứng) có khả năng "tạm dừng" trạng thái của tất cả các quy trình (ngoại trừ một người như AlarmManager) và sau đó "bỏ tạm dừng" trạng thái này khi thiết bị đến ra khỏi chế độ ngủ. Tôi cho rằng điều này chỉ có thể là do kiến trúc của thiết bị để tiết kiệm pin. Điều thực sự thú vị là nếu điều này là đúng, tại sao các dịch vụ nền vẫn còn sống khi ra khỏi chế độ ngủ. Họ có thể và làm trong thực tế bị giết trong chế độ ngủ. – AndroidDev