2012-07-02 49 views
8

Tôi gặp phải hành vi hơi kỳ lạ này khi phát triển trên Android và trong câu trả lời duy nhất tôi có thể tìm thấy đó là thiết kế và tôi không nên quan tâm đến nó .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 đó

Ứng dụng của tôi tìm nạp dữ liệu vị trí khi đang hoạt động và tôi sắp triển khai cách bảo vệ pin bằng cách dừng cập nhật vị trí khi sự kiện onPause được gọi và sau đó tiếp tục tìm nạp khi sự kiện onResume được gọi.

Trong khi gỡ lỗi, tôi nhận thấy hành vi lạ này khi khóa điện thoại, onPause-> onResume được gọi một lần sau ba lần trở lên và sau đó kết thúc bằng sự kiện onStop. Câu trả lời duy nhất tôi có thể tìm thấy là: đó là cách hoạt động của android, không bao giờ.

Tôi đoán tôi tò mò, ai đó có thể giải thích cho tôi về sự cần thiết phải dừng lại và tiếp tục một hoạt động phụ đơn giản nhiều lần? Điều đó không tiêu thụ nhiều pin hơn, đặc biệt là đối với các hoạt động lớn hơn có mã nghiêm trọng trong onResume? Có cách nào để ngăn điều này xảy ra không? Tôi sẽ rất vui khi biết rằng ít nhất mã của tôi trong những sự kiện đó không được gọi, có thể với khối if {} ngăn ngừa các chu kỳ CPU không cần thiết.

Bất kỳ thông tin chi tiết nào được đánh giá cao!

Trả lời

1

Bạn phải đăng ký bộ thu phát để xử lý các sự kiện "Thời gian chờ màn hình" và "Khóa màn hình".

Bạn vừa ngừng truy xuất dữ liệu của mình. đang mẫu:

public class ScreenReceiver extends BroadcastReceiver {  

     @Override 
     public void onReceive(Context context, Intent intent) { 
      if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { 
       //screen locked, do here 
      } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { 
       //screen unlocked, do something here 
      } 
     } 

} 

Bạn cần phải đăng ký máy thu phát sóng cho lớp ScreenReceiver này đến androidMenifest.xml

+0

Cảm ơn bạn, điều đó có thể sẽ làm. Thực ra tôi đang tìm kiếm thêm chi tiết về lý do tại sao điều này xảy ra, nhưng có lẽ tôi đang hỏi quá nhiều. – r41n

0

Gần đây tôi đã chạy vào cùng một vấn đề và đã có thể để ngăn chặn nó xảy ra bằng cách chơi với những thay đổi cấu hình cho hoạt động trong tệp kê khai. Tôi tin rằng khi người dùng khóa thiết bị, một vài điều có thể xảy ra: Định hướng có thể thay đổi, kích thước màn hình có thể thay đổi (nếu điều hướng hoặc thanh thông báo biến mất), v.v ... và làm cho Android xây dựng lại mọi hoạt động & đoạn. Tôi đã chọn rất nhiều tùy chọn trong Config changes và nó ngừng gọi onResume sau onPause.