Khi tôi khóa màn hình trong khi ứng dụng đang chạy "ở trên cùng", hệ thống sẽ gọi gần như ngay lập tức trên màn hình (Màn hình vẫn đen). Điều gì có thể là lý do cho hành vi phá hoại này?Android onCreate được gọi sau khi khóa màn hình
Trả lời
Đây là cách hệ điều hành Android hoạt động, nó quyết định thời điểm hủy chế độ xem của bạn. Khi bạn khóa điện thoại, ứng dụng sẽ chuyển sang trạng thái tạm dừng (onPause) của vòng đời hoạt động.
Khi hoạt động ở trạng thái tạm dừng và nếu nó chiếm nhiều bộ nhớ, hệ thống Android có quyền giết ứng dụng của bạn (onStop).
Vì vậy, nó phải gọi onCreate để tạo lại chế độ xem của bạn khi bạn mở khóa.
Nó thực sự đi đến 'onPause' và sau đó để' onStop' khi khóa màn hình. – TronicZomB
Tôi mặc dù tôi đã có ý nghĩa này bằng cách nói rằng ứng dụng của bạn đi đến trạng thái tạm dừng – user2336315
gọi onTạo khi hệ thống muốn hủy hoạt động của tôi có vẻ không hợp lý ... – user2224350
onDestroy() được gọi khi sau khi màn hình trở lại, bạn sẽ thấy ứng dụng tắt máy tính (onDestroy()).
Sau khi màn hình trở lại và bạn thấy bố cục/chế độ xem đầu tiên của ứng dụng thì nó được gọi là onStop() và onCreate().
Sau khi màn hình trở lại và bạn thấy cùng một giao diện trước khi màn hình biến mất, sau đó onPause() và onResume() được gọi.
Đối với tôi, tôi đã
android:configChanges="orientation"
nhưng điều này không giúp đỡ vì hoạt động của tôi là toàn màn hình và vì vậy tôi thêm
android:configChanges="keyboardHidden|orientation|screenSize"
trong thẻ hoạt động
Như đã đề cập trong Handling the Configuration Change Yourself
Nếu y ứng dụng của chúng tôi không cần phải cập nhật tài nguyên trong khi thay đổi cấu hình cụ thể và bạn có giới hạn hiệu suất yêu cầu bạn tránh khởi động lại hoạt động, sau đó bạn có thể tuyên bố rằng hoạt động của bạn xử lý thay đổi cấu hình, ngăn hệ thống khởi động lại hoạt động của bạn .
Điều này xảy ra nếu Hoạt động ở chế độ ngang và màn hình Khóa được bật bởi người dùng.
Có thể có hai lý do đằng sau này:
Nếu bất kỳ loại màn hình khóa được kích hoạt và hoạt động ở chế độ Landscape: Nếu thiết bị có màn hình Lock trong Portrait Mode, khi điện thoại bị khóa nó sẽ tự động chuyển sang chế độ dọc (Ngay cả khi hoạt động của bạn ở Chế độ ngang). Và khi thiết bị được mở khóa, Hoạt động của bạn sẽ hiển thị, nhưng nó lại chuyển từ Chân dung (Khi bị khóa) sang Cảnh quan, do đó Hoạt động bị Phá hủy và Tái tạo.
Đây là cách Hệ điều hành Android hoạt động, nó quyết định thời điểm hủy chế độ xem của bạn. Khi bạn khóa điện thoại, ứng dụng sẽ chuyển sang trạng thái tạm dừng (onPause) của vòng đời hoạt động. Khi một hoạt động ở trạng thái tạm dừng và nếu nó chiếm nhiều bộ nhớ, Hệ thống có quyền giết ứng dụng của bạn (onStop rồi onDestroy). Vì vậy, khi bạn mở khóa, cuộc gọi hệ thống (onCreate) để tạo lại chế độ xem của bạn.
Giải pháp:
- Bạn nên cẩn thận lưu và kiểm tra tình trạng sử dụng
onSaveInstanceState()
HOẶC - Sử dụng
android:configChanges="orientation|screenSize"
cho Tag hoạt động của bạn trong Manifest.
- 1. Android: OnResume có được gọi sau khi onCreate không?
- 2. onTạo không được gọi khi xoay màn hình - Android
- 3. Hoạt động Android trênDestroy() được gọi trên khóa màn hình
- 4. Khóa hướng màn hình (Android)
- 5. Các đoạn Android chồng chéo sau khi xoay màn hình
- 6. Hoạt động bị giết/onCreate được gọi sau khi chụp ảnh thông qua mục đích
- 7. Tiếp tục chạy ứng dụng sau khi tự động khóa màn hình - Phonegap (Android/iOS)
- 8. Màn hình trống giả lập Android 2.3 sau khi tạo
- 9. Android - Kích hoạt khóa hệ thống (còn gọi là màn hình khóa)
- 10. onResume được gọi liên tục trong khi màn hình điện thoại bị khóa
- 11. Android - Xử lý cuộc gọi trên màn hình Thay đổi hướng màn hình
- 12. TYPE_KEYGUARD giữ chế độ toàn màn hình sau khi thực hiện cuộc gọi
- 13. màn hình cuộc gọi đến android
- 14. onCreate() không được gọi bởi getWritableDatabase()
- 15. Dịch vụ Android onCreate được gọi nhiều lần mà không cần gọi trênDestroy
- 16. GLKit's -drawRect: không được gọi trong khi xoay màn hình
- 17. PhoneGap/Cordova Android nhận được kích thước màn hình sau khi bậtDeviceReady
- 18. Cách đặt hình ảnh màn hình khóa android
- 19. Hoạt động Android trên màn hình khóa mặc định
- 20. Ứng dụng OpenGL ES bị treo khi màn hình khóa hoặc hình nền được nhập
- 21. Bật sáng màn hình khi thông báo nhận được android
- 22. Lỗi thiết bị D3D trong khi khóa màn hình
- 23. Ý định gọi màn hình "Chọn khóa màn hình" là gì?
- 24. Cách tìm màn hình bị khóa trong android
- 25. Tắt nút Khóa màn hình (Nguồn) trong Android
- 26. Android - Xoay màn hình xoay
- 27. AutoExposureLock đặt lại sau khi gọi takePicture()
- 28. Ngăn chặn thanh trạng thái ẩn xuất hiện lại sau khi khóa màn hình
- 29. Màn hình khóa kết quả của điện thoại Android trong một số sự kiện onPause/onResume sau đó
- 30. Âm thanh nền iOS dừng khi màn hình bị khóa
'onCreate' được gọi khi định hướng màn hình được thay đổi và trên phiên bản sau của Android khi kích thước màn hình thay đổi. Thật khó để nói tại sao điều này đang xảy ra với bạn mà không có bất kỳ mã hoặc XML nào được đăng. Để ngăn chặn 'onCreate' được gọi trong một số ứng dụng của tôi, tôi đã thêm' android: configChanges = "keyboardHidden | orientation | screenSize" 'vào các hoạt động mà tôi không muốn có' onCreate' được gọi khi hướng màn hình hoặc kích thước thay đổi. – HeatfanJohn
+1 Downvoters nên thêm một bình luận cho phản hồi quan trọng về cách cải thiện câu hỏi khi downvoting. – HeatfanJohn