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.
'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