ฉันจะบอกได้อย่างไรว่าฉันได้รับผลกระทบ
นี่อาจเป็นคำถามแรกสำหรับผู้ที่ไม่คุ้นเคยกับหัวข้อนี้ ด้วย Gingerbread (Android 2.3) ขึ้นไปคุณจะได้รับบริการต่าง ๆ เพื่อช่วยให้คุณเข้าใจ: สถิติแบตเตอรี่ แม้ว่าผู้ผลิตมักจะวางไว้ที่จุดที่แตกต่างกัน แต่ส่วนใหญ่จะพบในการตั้งค่า→เกี่ยวกับโทรศัพท์→แบตเตอรี่หรือที่คล้ายกันและแสดงรายการแอพที่ใช้แบตเตอรี่ส่วนใหญ่ของคุณ ด้านบนของที่เป็นกราฟขนาดเล็ก แตะที่และมันจะนำคุณไปสู่หน้าจอที่คล้ายกับหน้าจอนี้:
สกรีนช็อตของสถิติแบตเตอรี่บน Android 2.3
ฉันเลือกภาพหน้าจอจากหนึ่งในอุปกรณ์ของฉันซึ่งแสดงให้เห็นถึงปัญหา ดูที่แถบสีฟ้าสองแถบด้านล่าง ("Aktiv" = อุปกรณ์ยังคงทำงานอยู่ (ใช้งานอยู่) "Bildschirm an" = "Screen on") แถบสีน้ำเงินด้านขวาสุดที่ "Aktiv" หมายถึง WakeLock: อุปกรณ์ยังคงไม่ว่าง ความจริงที่หน้าจอถูกปิด ดังนั้นเราจึงมั่นใจได้เลยว่าเรามี WakeLock - แต่เราไม่สามารถบอกได้ว่าใครเป็นสาเหตุ
หากอุปกรณ์ของคุณไม่มีหน้าจอนี้ (หรือแถบด้านล่าง: ฉันเพิ่งค้นพบเช่นLG Optimus 4X ที่ใช้ Android 4.0.3 ได้ตัดแถบเหล่านี้ออก) คุณสามารถค้นหาได้เช่นใช้GSam Battery Monitor :
ข้อมูลที่คล้ายกันจากGSam Battery Monitor - นี่คือ "แถบสีฟ้า" ที่กล่าวถึงเป็นสีเหลือง / ส้ม
อะไรเป็นสาเหตุของ WakeLock
น่าเสียดายที่คำถามนี้ไม่สามารถตอบได้ด้วยแอพที่ติดตั้งไว้ล่วงหน้า (ยกเว้นอาจจะเป็น Custom ROM บางอัน) แต่มีเครื่องมือที่สามารถใช้ได้ ผู้สมัครที่รู้จักกันดีที่สุดสำหรับเรื่องนี้คือBetterBatteryStatsและแสดงให้เราเห็นสาเหตุในส่วน wakelocks บางส่วน:
ภาพหน้าจอจาก BetterBatteryStats
ในตัวอย่างแรก2 (นำมาจากหน้า playstore ของแอพ) เหตุการณ์ที่ทำให้ WakeLocks ส่วนใหญ่เป็นสิ่งที่ต้องการ: เราไม่ต้องการให้การเล่นหยุดลงขณะฟังเพลง ดังนั้นตัวอย่างที่สอง3 (นำมาจากกรณีจริงในหนึ่งในอุปกรณ์ของฉัน) อาจพิสูจน์ได้ดีกว่า: เหตุการณ์ 3 อันดับสูงสุดเกิดจากแอปเดียวกันซึ่งต้องการ WakeLock เพื่อให้บริการ IMAP เปิดใช้งานอยู่
สำหรับทางเลือกในBetterBatteryStatsลองใช้แอพWakelock Detector ที่ระบุไว้ในคำตอบของ UzumAppsซึ่งดูเหมือนง่ายต่อการจัดการโดยเฉพาะอย่างยิ่งสำหรับผู้ที่ไม่ได้ใช้เทคโนโลยี:
Wakelock Detector - คลิกที่ภาพเพื่อขยาย (ที่มา: Google Play )
สิ่งที่สามารถทำได้
หากกรณีมีความชัดเจนเช่นเดียวกับในตัวอย่างที่สองในส่วนก่อนหน้าการดำเนินการค่อนข้างชัดเจน - อย่างน้อยในกรณีของฉัน: ฉันไม่จำเป็นต้องได้รับแจ้งทันทีเมื่อมีจดหมายมาถึง ความล่าช้า 30 นาทีเป็นที่ยอมรับอย่างแน่นอน ดังนั้นฉันจึงเข้าไปในแอปอีเมลปิดการใช้งานIMAP Push (ดูเพิ่มเติมที่: พุชอีเมล ) และเปลี่ยนเป็นช่วงเวลาโพล 30 นาทีแทน WakeLocks ไม่ได้หายไปทั้งหมด แต่ลดลงอย่างเห็นได้ชัด - อายุการใช้งานแบตเตอรี่ดีขึ้นอย่างเห็นได้ชัด
จากนั้นมีกรณีที่กล่าวถึงในคำถามนี้: แอปที่มีพฤติกรรมไม่ดีไม่ปล่อย WakeLock เผชิญหน้ากับสิ่งที่คุณค้นพบและขอการแก้ไข หากเขาส่งมอบ: แก้ไขปัญหาได้ ถ้าไม่: มีแอพสำรองเกือบทุกตัว
เกิดอะไรขึ้นถ้ามันเป็นระบบ Android ตัวเอง?
ใช่บางครั้งดูเหมือนว่า: 98% หรือมากกว่านั้นถูกใช้โดยบริการ Android บางอย่าง โอ้ถ้ามันเป็น 98% ในกรณีส่วนใหญ่ผู้สมัครที่เป็นชื่อLocationManagerService คนเลวสอดแนมเรา? ไม่จำเป็น. ในกรณีพิเศษนี้รายการ "คนเลว" ที่ปรากฏนั้นไม่ได้มีความผิดแม้แต่น้อยก็ไม่ได้โดยตรง นี่คือแอพอื่นที่ขอตำแหน่งปัจจุบันบ่อยเกินไป : มีบทความที่ดีใน Setera.org เกี่ยวกับเรื่องนี้คือหาตำแหน่ง Android LocationManagerService ท่อระบายน้ำแบตเตอรี่ เพื่อให้เป็นนามธรรม: มันใช้ Androiddumpsys
คุณสมบัติ (ต้องใช้ root!) เพื่อถ่ายโอนข้อมูลสถานะระบบและให้คุณตรวจสอบ Listeners ที่สร้างขึ้นสำหรับ LocationManagerService ดูการกำหนดค่าของพวกเขาอย่างใกล้ชิดซึ่งแสดงให้เห็นว่า "ตอก" อย่างต่อเนื่องเพื่อหาข้อมูลตำแหน่ง (บางคนทำอย่างถาวร เมื่อ ID ของแอปปรากฏในรายการและที่อื่นในการถ่ายโอนข้อมูลรวมถึงชื่อทางเทคนิคของแอพคุณยังสามารถระบุและดำเนินการที่เหมาะสมได้
แล้วยูเอฟโอล่ะ
น่าเสียดายที่มีเช่น: แอปที่ลงทะเบียน WakeLock - แล้วออกโดยไม่ปล่อยออกมา สิ่งที่เหลืออยู่คือ * ไม่ได้ใช้ F *** ไอเท็มล้าสมัย * - WakeLocks ถูกระงับไว้โดยไม่ใช้งาน ดังนั้นจึงไม่มีวิธีที่จะนำแอปไปเบื้องหน้าและกำหนดค่าใหม่อีกครั้งหรือทำให้แอปปล่อย WakeLocks
นี่เป็นทางออกเดียวที่ฉันรู้จักคือรีบูต - และฉันต้องการมีทางออกที่ดีกว่า แน่นอนถ้าคุณรู้ว่าแอปผิดขั้นตอนที่เกี่ยวข้องนั้นเหมือนกับขั้นตอนข้างต้น: แจ้ง dev รับการแก้ไข - หรือแทนที่แอป แต่เกี่ยวกับการกำจัดWakeLock ปัจจุบัน บางทีคนอื่นอาจเป็นทางเลือกที่ดีกว่าในการรีบูต
มีคำแนะนำเพิ่มเติมให้อ่านอีกหรือไม่?
แน่ใจ หนึ่งอันตอนนี้ฉันอาจเพิ่มอีกทีในภายหลัง:
/sys/power/wake_lock
แต่ถ้าคุณทำแบบ "ถูกต้อง" โดยใช้ PowerManager และ PowerManager.WakeLock บริการทั้งสองจะถือ wakelock จริง และปล่อยให้มันแม้ว่ากระบวนการของคุณจะถูกฆ่า ...