Làm thế nào tôi có thể nói tôi bị ảnh hưởng?
Đây có lẽ là câu hỏi đầu tiên cho những người không quen thuộc với chủ đề này. Với Gingerbread (Android 2.3) trở lên, bạn đã có một dịch vụ trên tàu giúp bạn tìm ra: thống kê pin. Mặc dù các nhà sản xuất có xu hướng đặt nó ở các điểm khác nhau, nhưng nó chủ yếu được tìm thấy trong Cài đặt → Giới thiệu về điện thoại → Pin hoặc tương tự và hiển thị danh sách các ứng dụng đã sử dụng hầu hết pin của bạn. Trên đó là một biểu đồ nhỏ. Nhấn vào đó và nó đưa bạn đến một màn hình tương tự như màn hình này:
Ảnh chụp màn hình thống kê pin trên Android 2.3
Tôi đã chọn một ảnh chụp màn hình từ một trong các thiết bị của mình để minh họa vấn đề này. Nhìn vào hai thanh màu xanh lam thấp hơn ("Ak kích hoạt" = Thiết bị được giữ tỉnh táo (hoạt động), "Bildsch xác nhận" = "Màn hình bật"), thanh màu xanh lam bên phải nhất trên "Ak kích hoạt" biểu thị WakeLock: Thiết bị vẫn được giữ mặc dù thực tế màn hình đã bị tắt Vì vậy, bằng cách này, chúng tôi có thể khá chắc chắn rằng chúng tôi đã có WakeLock - nhưng chúng tôi không thể biết ai đã gây ra nó.
Nếu thiết bị của bạn không cung cấp màn hình này (hoặc các thanh ở phía dưới: Tôi mới phát hiện ra, ví dụ như LG Optimus 4X chạy Android 4.0.3 đã cắt các thanh này), bạn có thể tìm thấy chúng, ví dụ như sử dụng Trình theo dõi pin của GSam :
Thông tin tương tự từ GSam Battery Monitor - ở đây các "thanh màu xanh" được đề cập có màu vàng / cam
Điều gì gây ra WakeLock?
Thật không may, câu hỏi này không thể được trả lời bằng các ứng dụng được cài đặt sẵn (ngoại trừ, có thể, một số ROM tùy chỉnh). Nhưng có những công cụ có sẵn. Ứng cử viên nổi tiếng nhất cho điều này là BetterBatteryStats và cho chúng ta thấy nguyên nhân trong phần wakelocks một phần của nó :
Ảnh chụp màn hình từ BetterBatteryStats
Trong ví dụ đầu tiên 2 (được lấy từ trang playstore của ứng dụng), sự kiện gây ra hầu hết WakeLocks là một điều mong muốn: Chúng tôi không muốn phát lại bị dừng khi nghe nhạc. Vì vậy, ví dụ thứ hai 3 (được lấy từ một trường hợp thực tế trên một trong các thiết bị của tôi) có thể chứng minh rõ hơn: 3 sự kiện trên cùng được gây ra bởi cùng một ứng dụng, cần WakeLock để duy trì dịch vụ đẩy IMAP.
Để thay thế cho BetterBatteryStats , hãy xem ứng dụng Wakelock dò được đề cập trong câu trả lời của UzumApps - có vẻ dễ xử lý hơn, đặc biệt là đối với những người không chuyên về công nghệ:
Máy dò Wakelock - Bấm vào hình ảnh để phóng to. (Nguồn: Google Play )
Những gì có thể được thực hiện?
Nếu trường hợp rõ ràng như trong ví dụ thứ hai trong phần trước, thì hành động này khá rõ ràng - ít nhất là trong trường hợp của tôi: Tôi không cần phải được thông báo ngay lập tức khi có thư đến; độ trễ 30 phút là hoàn toàn chấp nhận được. Vì vậy, tôi đã truy cập vào ứng dụng thư, đã vô hiệu hóa IMAP Push (xem thêm: Email đẩy ) và thay vào đó chuyển sang khoảng thời gian thăm dò 30 phút. WakeLocks không hoàn toàn biến mất, nhưng giảm đáng kể - thời lượng pin được cải thiện rõ rệt.
Sau đó, có trường hợp được đề cập trong chính câu hỏi: Một ứng dụng có hành vi xấu không phát hành WakeLock. Đối đầu với nhà phát triển với những phát hiện của bạn và yêu cầu sửa chữa. Nếu anh ấy giao hàng: vấn đề được giải quyết. Nếu không: Hầu như luôn có sẵn một ứng dụng thay thế.
Nếu đó là Hệ thống Android thì sao?
Vâng, đôi khi có vẻ như vậy: 98% trở lên được tiêu thụ bởi một số dịch vụ Android. Ồ, nếu nó là 98%, trong hầu hết các trường hợp, ứng cử viên được đặt tên là LocationManagerService . Kẻ xấu làm gián điệp cho chúng tôi? Không cần thiết. Trong trường hợp đặc biệt này, "kẻ xấu" được liệt kê thậm chí không có tội - ít nhất là không trực tiếp. Đây là một ứng dụng khác yêu cầu vị trí hiện tại quá thường xuyên. Có một bài viết tuyệt vời trên Setera.org về điều này: Xác định mức tiêu hao pin của Android LocationManagerService . Để đưa ra một bản tóm tắt: Nó sử dụng Androiddumpsys
tính năng (yêu cầu root!) để kết xuất trạng thái hệ thống và cho phép bạn điều tra các trình nghe được thiết lập cho LocationManagerService. Nhìn kỹ hơn vào cấu hình của chúng cho thấy liên tục "đánh võng" nó để biết thông tin vị trí (một số làm như vậy vĩnh viễn, tức là không nghỉ). Vì ID của ứng dụng được liệt kê cùng và tại một nơi khác trong bãi chứa thậm chí cùng với tên kỹ thuật của ứng dụng, bạn vẫn có thể xác định nó và thực hiện các hành động thích hợp.
Còn UFO thì sao?
Thật không may, có những thứ như vậy: Các ứng dụng đã đăng ký WakeLock - và sau đó thoát ra mà không phát hành nó. Những gì còn lại là * Không sử dụng F *** ing Obsoletes * - WakeLocks bị giữ không sử dụng. Vì vậy, không có cách nào đơn giản là đưa ứng dụng lên nền trước và định cấu hình lại hoặc làm cho nó phát hành WakeLocks.
Ở đây, giải pháp duy nhất được biết đến với tôi là khởi động lại - và tôi muốn có một giải pháp tốt hơn. Tất nhiên, nếu bạn biết ứng dụng có tội, các bước liên quan đến nó cũng giống như trên: thông báo cho nhà phát triển, nhận sửa chữa - hoặc thay thế ứng dụng. Nhưng về việc thoát khỏi WakeLock hiện tại ? Có lẽ ai đó khác có thể cung cấp một sự thay thế tốt hơn để khởi động lại?
Có một số bài đọc thêm đề nghị?
Chắc chắn rồi. Một cho bây giờ, tôi có thể thêm sau:
/sys/power/wake_lock
, nhưng nếu bạn đã làm theo cách "đúng" bằng PowerManager và PowerManager.WakeLock, dịch vụ sẽ giữ cả wakelock thực và giải phóng nó ngay cả khi quy trình của bạn bị giết ...