14

Làm cách nào để ngăn hoạt động tái tạo màn hình khi tắt màn hình?Ngăn không cho tái tạo hoạt động Android khi tắt màn hình

Những gì tôi làm

  1. Bắt đầu Bejewels và đi đến màn hình đồ trang sức.
  2. Nhấn nút nguồn ngay. Màn hình tắt, nhưng thiết bị thì không.
  3. Nhấn nút nguồn một lần nữa.

Những gì tôi thấy

Màn hình giống như trước khi quay màn hình tắt.

Trong trường hợp ứng dụng của tôi (tầm thường một, chỉ là một ứng dụng web với một WebView đơn) kịch bản như sau:

Những gì tôi làm

  1. Bắt đầu của tôi ứng dụng. Phương thức onCreate() hoạt động sẽ tải một URL vào WebView.
  2. Nhấn nút nguồn ngay. Màn hình tắt, nhưng thiết bị thì không.
  3. Nhấn nút nguồn một lần nữa.

Những gì tôi thấy

Các WebView được tải lại trang.

gì tôi mong đợi

Như trong trường hợp Bejewels Tôi muốn nhìn thấy cùng một màn hình, mà cho ứng dụng của tôi là trang ở trạng thái trước đó: kịch bản đang chạy, một lĩnh vực hình thức là đã điền, v.v.

Gỡ lỗi cho thấy rằng tôi đã sai (trong câu hỏi trước) và onDestroy() và onCreate() đang được gọi từng người một khi màn hình vừa được bật. Và vì tôi vẫn nghe một bản nhạc, được phát bởi một kịch bản, khi màn hình tắt, có vẻ như cả hoạt động và WebView đều tồn tại cho đến khi tôi nhấn lại nút nguồn.

Những gì tôi đã thử.

  1. android: alwaysRetainTaskState = "true" Hành vi tương tự.
  2. Đọc về ý định (không có kết quả, tôi chỉ không hiểu, cách chúng được áp dụng cho trường hợp của tôi).
  3. Sử dụng PhoneGap. Nó hoạt động khác nhau: chỉ giết toàn bộ ứng dụng khi nhấn nút nguồn.IS này tốt hơn, nhưng không phải là tốt nhất.

Trả lời

1
  1. Tạo chế độ xem trong Application.onCreate().
  2. Thêm chế độ xem vào bố cục trong Activity.onCreate().
  3. Xóa chế độ xem khỏi bố cục trong Activity.onDestroy().

chi tiết đang ở đây: Attach/detach Android view to/from layout

1

add:

android:launchMode="singleTop" 

đến phần hoạt động trong xml manifest. xem tại đây http://developer.android.com/guide/topics/manifest/activity-element.html

+0

Không có gì thay đổi. (Tôi đã không xóa android: alwaysRetainTaskState = "true"). – noober

+0

sau khi nhấn nút nguồn để tắt màn hình và sau đó một lần nữa để màn hình trên onResume() được gọi là, bạn đang làm gì trong onResume()? – Bush

+0

1. Có, onResume() được gọi. Tôi đã kiểm tra nó (ghi đè và gọi là Toast). 2. Xin lỗi vì đã câm, tôi chỉ không đoán tôi đã phải làm một cái gì đó trong onResume(). Vì vậy, nó đã không được ghi đè và bây giờ nó chỉ chứa cuộc gọi Toast. 3. Hành vi bây giờ là như sau: sau khi nhấn nút lần đầu tiên, khi màn hình tắt, trang đang tải lại ở chế độ nền (nhạc dừng để phát sau đó phát từ đầu, có javascript trong phần tải lên của trang web bắt đầu phát nhạc đang chơi). – noober

28

Các giải pháp cho vấn đề này có thể là tương tự như mô tả ở đây: onDestroy gets called each time the screen goes on

Nghe có vẻ như hoạt động của bạn đang được khởi động lại do sự thay đổi cấu hình, xem http://developer.android.com/guide/topics/resources/runtime-changes.html . Phổ biến nhất là khi ứng dụng của bạn ở chế độ ngang (như hầu hết các trò chơi) và sau đó khóa màn hình được tương tác bằng cách nhấn vào nút nguồn. Khóa màn hình ở chế độ dọc và do đó kích hoạt thay đổi về hướng mà kích hoạt hoạt động sẽ được khởi động lại.

Hành vi này có thể được ghi đè bằng cách thêm:

android:configChanges="orientation|keyboardHidden" 

... để file manifest của bạn nếu bạn đang nhắm mục tiêu cấp độ API ít hơn 13. Hoặc

android:configChanges="orientation|keyboardHidden|screenSize" 

... nếu bạn là mức API nhắm mục tiêu lớn hơn 13.

Lưu ý rằng bạn có thể cần phải chuyển dự án-> thuộc tính và cập nhật mục tiêu xây dựng dự án của bạn. 'screenSize' sẽ không được nhận ra nếu mục tiêu xây dựng của bạn nhỏ hơn 13.

Thay đổi cấu hình khác có thể khiến hoạt động được đặt lại. Liên kết sau cung cấp danh sách các thay đổi cấu hình có thể có: http://developer.android.com/guide/topics/manifest/activity-element.html#config

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