Saya kira sebagian besar dari Anda setidaknya pernah mendengar tentang WakeLocks . Banyak dari Anda sudah mengalaminya - apakah dengan sadar atau tidak. Beberapa orang mungkin tahu bagaimana menghadapinya secara umum - tetapi hanya sedikit yang tahu bagaimana menghadapi "kandidat yang lebih rumit".
Bagi mereka yang tidak tahu, meskipun tautan di atas mengarah ke penjelasan, ringkasan singkat: Aplikasi dapat meminta WAKE_LOCK
untuk menjaga komponen perangkat dari "tidur", sehingga mereka dapat melakukan tugas bahkan ketika layar dimatikan. Ini sangat berguna dalam banyak kasus (mis. Menjaga layar menyala saat bernavigasi, menjaga WiFi aktif untuk mengalirkan musik) - tetapi digunakan dengan cara yang salah, ini menyebabkan baterai Anda terkuras dalam jangka pendek (hingga 25% per jam) .
Sering kali mudah untuk mengidentifikasi sumbernya (biasanya aplikasi berperilaku buruk) - Saya akan menunjukkan ini dalam jawaban di bawah, karena mungkin terbukti bermanfaat bagi banyak pengguna. Tapi apa yang harus dilakukan jika aplikasi yang meminta WakeLock keluar tanpa melepaskannya? Sistem Android tidak akan menanganinya . Tentu, reboot akan menyelesaikan masalah - tetapi ini tidak selalu merupakan opsi (yang diinginkan).
Jadi, dari perspektif pengguna (saya tidak bertanya tentang solusi pengembangan, tetapi bagaimana pengguna dapat menangani hal-hal):
Apa yang bisa dilakukan * oleh pengguna * untuk menyelesaikan masalah dan menghindari pengurasan baterai lebih lanjut?
Saya lebih suka jawaban yang tidak melibatkan root (sehingga semua pengguna dapat memperoleh manfaat darinya). Namun, "solusi yang di-rooting" sepenuhnya valid dan selamat datang.
sumber
/sys/power/wake_lock
, tetapi bahwa jika Anda melakukannya dengan cara "benar" menggunakan PowerManager dan PowerManager.WakeLock, layanan keduanya akan memegang wakelock asli dan lepaskan bahkan jika proses Anda terbunuh ...Jawaban:
Bagaimana saya bisa tahu saya terpengaruh?
Ini mungkin pertanyaan pertama bagi mereka yang tidak terbiasa dengan topik ini. Dengan Gingerbread (Android 2.3) dan di atasnya, Anda memiliki layanan yang membantu Anda mengetahui: statistik baterai. Meskipun produsen cenderung menempatkannya di titik yang berbeda, sebagian besar ditemukan di Pengaturan → Tentang telepon → Baterai atau yang serupa, dan menunjukkan daftar aplikasi yang telah menggunakan sebagian besar baterai Anda. Di atas itu adalah grafik kecil. Ketuk itu, dan itu membawa Anda ke layar yang mirip dengan ini:
Tangkapan layar statistik baterai di Android 2.3
Saya memilih tangkapan layar dari salah satu perangkat saya yang menggambarkan masalah ini. Melihat dua bilah biru bawah ("Aktiv" = Perangkat tetap terjaga (aktif), "Bildschirm an" = "Layar menyala"), bilah biru paling kanan pada "Aktiv" menunjukkan WakeLock: Perangkat tetap sibuk meskipun fakta layar dimatikan. Jadi dengan ini kita bisa sangat yakin kita punya WakeLock - tetapi kita tidak tahu siapa yang menyebabkannya.
Jika perangkat Anda tidak menawarkan layar ini (atau bilah di bagian bawah: Saya baru saja menemukan misalnya LG Optimus 4X yang menjalankan Android 4.0.3 telah memotong bilah ini), Anda dapat menemukannya misalnya menggunakan Monitor Baterai GSam :
Informasi serupa dari Monitor Baterai GSam - di sini "bilah biru" berwarna kuning / oranye
Apa yang menyebabkan WakeLock?
Sayangnya, pertanyaan ini tidak dapat dijawab dengan menggunakan aplikasi yang sudah diinstal sebelumnya (kecuali, mungkin, beberapa ROM Kustom). Tetapi ada alat yang tersedia yang bisa. Kandidat yang paling dikenal untuk hal ini adalah BetterBatteryStats , dan menunjukkan penyebabnya di bagian wakelocks parsial :
Screenshot dari BetterBatteryStats
Pada contoh pertama 2 (diambil dari halaman playstore aplikasi), acara yang menyebabkan sebagian besar WakeLock adalah yang diinginkan: Kami tidak ingin pemutaran dihentikan saat mendengarkan musik. Jadi contoh kedua 3 (diambil dari kasing nyata di salah satu perangkat saya) mungkin terbukti lebih baik: 3 peristiwa teratas disebabkan oleh aplikasi yang sama, yang membutuhkan WakeLock untuk menjaga layanan push IMAP aktif.
Untuk alternatif dari BetterBatteryStats , periksa aplikasi Wakelock Detector yang disebutkan dalam jawaban UzumApps ' - yang tampaknya lebih mudah ditangani terutama untuk non-teknisi:
Wakelock Detector - Klik gambar untuk memperbesar. (Sumber: Google Play )
Apa yang bisa dilakukan?
Jika kasusnya sejelas pada contoh kedua di bagian sebelumnya, tindakannya cukup jelas - setidaknya dalam kasus saya: Saya tidak perlu segera diberitahu ketika email datang; keterlambatan 30 menit benar-benar dapat diterima. Jadi saya masuk ke aplikasi email, menonaktifkan IMAP Push (lihat juga: Push Email ), dan sebagai gantinya beralih ke interval jajak pendapat 30 menit. WakeLocks tidak sepenuhnya hilang, tetapi turun drastis - daya tahan baterai meningkat secara nyata.
Lalu ada kasus yang disebutkan dalam pertanyaan itu sendiri: Aplikasi berperilaku buruk tidak melepaskan WakeLock-nya. Hadapi dev dengan temuan Anda dan minta diperbaiki. Jika dia memberikan: masalah terpecahkan. Jika tidak: Hampir selalu ada aplikasi alternatif yang tersedia.
Bagaimana jika itu adalah Sistem Android itu sendiri?
Ya, terkadang hanya seperti itu: 98% atau lebih dikonsumsi oleh beberapa layanan Android. Oh, jika 98%, dalam banyak kasus kandidat dinamai LocationManagerService . Orang jahat memata-matai kita? Belum tentu. Dalam kasus khusus ini, "orang jahat" yang terdaftar bahkan tidak bersalah - setidaknya tidak secara langsung. Ini dia aplikasi lain yang terlalu sering meminta lokasi saat ini. Ada artikel yang bagus di Setera.org tentang ini: Menentukan lokasi LocationManagerService baterai Android dengan tepat . Untuk memberikan abstrak: Ini menggunakan Android
dumpsys
fitur (memerlukan root!) untuk membuang status sistem, dan memungkinkan Anda menyelidiki pendengar yang dibuat untuk LocationManagerService. Melihat lebih dekat pada konfigurasi mereka menunjukkan yang terus-menerus "memalu" untuk info lokasi (beberapa melakukannya secara permanen, yaitu tanpa istirahat). Ketika ID aplikasi terdaftar, dan di tempat lain di tempat sampah bahkan bersama dengan nama teknis aplikasi, Anda masih dapat mengidentifikasi dan mengambil tindakan yang sesuai.Dan bagaimana dengan UFO?
Sayangnya, ada seperti: Aplikasi yang mendaftarkan WakeLock - dan kemudian keluar tanpa melepaskannya. Apa yang tersisa adalah * Obliolet yang Tidak Digunakan * - WakeLock tidak digunakan. Jadi tidak ada cara untuk hanya membawa aplikasi ke latar depan dan mengkonfigurasi ulang, atau membuatnya melepaskan WakeLocks-nya.
Di sini satu-satunya solusi yang saya kenal adalah reboot - dan saya ingin memiliki solusi yang lebih baik. Tentu saja, jika Anda mengetahui aplikasi yang bersalah, langkah-langkahnya sama seperti di atas: beri tahu dev, dapatkan perbaikan - atau ganti aplikasi. Tetapi tentang menyingkirkan WakeLock saat ini ? Mungkin orang lain bisa memberikan alternatif yang lebih baik untuk reboot?
Apakah ada beberapa bacaan lanjutan yang disarankan?
Yakin. Satu untuk saat ini, saya dapat menambahkan lebih banyak nanti:
sumber
Singkatnya, ini adalah pertanyaan yang sangat bagus tetapi saya khawatir, ini menjamin lebih dari sekedar membuat pengguna akhir sadar!
Mendesain ulang kernel untuk menghilangkan wake-lock dan menggunakan cara efisien yang lebih teliti dalam mengelola prinsip dengan lebih baik sehingga memperpanjang usia baterai.
Sayangnya, itu telah diterima sebagai solusi de-facto untuk memungkinkan "manajemen daya" meskipun tidak tepat efisien juga! Ada diskusi yang luas tentang wakelocks (dengan Gregh Kroah Hartman - guru Linux untuk pengembangan driver - saya googling untuk linky yang tepat), situs lain seperti LWN.net dan artikel lain dijelaskan di situs yang sama di sini . Ini adalah artikel yang disebutkan oleh Gregh Kroah Hartman di blog ini , di mana ia tampaknya setuju dengan solusi alternatif yang diusulkan oleh Rafael J. Wysocki telah banyak mendokumentasikan tentang alternatif potensial. Tidak yakin apakah itu benar-benar ada di kernel v3.xx yang lebih modern
Aplikasi yang dirancang dengan buruk dapat dan sering meminta wakelocks seperti menjaga layar tetap menyala, tetapi pada kenyataannya, dalam skenario ini untuk menjaga layar tetap menyala, sebenarnya ada cara yang lebih efisien untuk melakukan ini:
Sementara itu, berusaha untuk menjaga jargon dll untuk pengguna akhir, benar-benar inti masalah bermuara pada kode kernel dalam bagaimana wakelocks dikelola.
Berikut ini adalah ringkasan singkat tentang XDA tentang apa yang wakelocks untuk yang belum tahu. Dengan menggunakan BetterBatteryStats , orang dapat melihat proses mana yang menghabiskan baterai, wiki di-host di github, dan tersedia di pasaran di sini .
sumber
Lihat Wakelock Detector: XDA-Developers / Google Play :
Detektor Wakelock mengelompokkan wakelocks aplikasi menjadi satu tampilan yang dapat diperluas untuk tampilan yang lebih baik. Dan itu menunjukkan aplikasi mana yang sedang berjalan. Dan ada tombol bunuh hapus info dalam tampilan aplikasi yang diperluas.
Klik gambar untuk memperbesar. (Sumber: Google Play )
Pengungkapan: Saya adalah salah satu pengembang yang bertanggung jawab untuk aplikasi ini. Empat teman lagi bersama saya mengerjakan proyek ini sebagai hobi.
sumber
Beberapa cara yang akan membantu pengguna perangkat yang tidak di-unroot
Ini adalah perkembangan terbaru dan karenanya memposting ini untuk pengguna perangkat yang tidak di-root. Diuji bekerja di Moto X Play (Android 6.0.1)
Unduh WLD dari tautan Play store di atas
Manual untuk menggunakan WLD di sini
Petunjuk untuk perangkat yang tidak di-rooting di sini . Ini memiliki semua detail kecuali untuk meringkas:
Aktifkan USB debugging pada perangkat dan
adb
Unduh Wakelock Unlocker untuk Chrome di laptop Anda (juga berfungsi di Chromium)
Aktifkan itu dan Anda selesai!
Versi Light Wakelock Detector tidak menampilkan statistik sejak dicabut
Catatan: Saya tidak bisa membuat metode kedua bekerja, akan menyambut solusi pengeditan dalam membuatnya berfungsi untuk orang yang tidak mengerti seperti saya
sumber