2013-05-01 63 views
10

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

+1

'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

+0

+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

Trả lời

1

Đâ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.

+1

Nó thực sự đi đến 'onPause' và sau đó để' onStop' khi khóa màn hình. – TronicZomB

+0

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

+1

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

0

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.

5

Đố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 .

+0

Đây cũng là trường hợp của tôi. – realaboo

+0

Trình tiết kiệm cuộc sống. configChanges = "orientation" đang hoạt động trên máy tính bảng của tôi, nhưng không hoạt động trên điện thoại. Câu trả lời của bạn đã giải quyết vấn đề này. – Rodia

0

Đ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:

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

  2. Đâ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:

  1. Bạn nên cẩn thận lưu và kiểm tra tình trạng sử dụng onSaveInstanceState() HOẶC
  2. Sử dụng android:configChanges="orientation|screenSize" cho Tag hoạt động của bạn trong Manifest.
Các vấn đề liên quan