(Artık) WakeLocks ile nasıl başa çıkılır?


40

Çoğunuzun en azından sanırım duydu hakkında WakeLocks . Birçoğunuz onları zaten deneyimlemiş olacaksınız - bilerek veya bilmeyerek. Bazıları genel olarak onlarla nasıl başa çıkacağını biliyor olabilir - ancak sadece birkaçı "daha karmaşık adaylarla" nasıl başa çıkacağını bilir.

Bilmeyenler için, yukarıdaki bağlantı bir açıklamaya yol açsa da, kısa bir özet: Uygulamalar WAKE_LOCKbir aygıt bileşenini "uykudan" tutmak için istekte bulunabilir , böylece ekran kapatıldığında bile bir görevi yerine getirebilirler. Bu, çoğu durumda çok yararlıdır (örneğin gezinirken ekranı açık tutmak, WiFi'yi müzik yayını için aktif tutmak) - ancak yanlış şekilde kullanıldığında, pilinizin kısa sürede tükenmesine neden olur (saatte% 25'e kadar) .

Çoğu zaman kaynağı tanımlamak kolaydır (genellikle kötü davranış gösteren bir uygulama) - Bunu, birçok kullanıcı için faydalı olabileceğinden, aşağıdaki yanıtta göstereceğim. Ancak WakeLock'u isteyen uygulama yayınlanmadan çıkarsa ne yapmalı? Android sistemi bununla ilgilenmeyecek . Elbette, yeniden başlatma işlemi sorunu çözecektir - ancak her zaman (istenen) bir seçenek değildir.

Bu nedenle, kullanıcılar açısından bakıldığında (geliştirme çözümleri hakkında soru sormuyorum, ancak bir kullanıcının işleri nasıl idare edebileceğini):

Sorunu çözmek ve pilin boşalmasını önlemek için kullanıcı tarafından * neler yapılabilir * ?

Root içermeyen cevapları tercih ederim (böylece tüm kullanıcılar bundan faydalanabilir). Bununla birlikte, "köklü çözümler" tamamen geçerlidir ve ayrıca kabul edilir.


2
Bunu kullanarak /sys/power/wake_lock, ancak kullanarak wakelock'u "yanlış" şekilde yarattıysanız , ancak PowerManager ve PowerManager.WakeLock kullanarak "doğru" şekilde yaptıysanız, hizmetin gerçek wakelock'u tutacağı izlenimini edindim. ve senin sürecin öldürülse bile onu serbest bırak ...
Izkata

1
Bağladığım bilgilere göre, durum böyle değil. Birileri orada çekirdek kaynaklarını kontrol ettiğini ve bununla ilgili hiçbir ipucu bulamadığını bildirdi. Geliştiriciler için ipucu: "kısmi wakelocks" talepleri zamanlanmış olarak talep edilebilir , bu nedenle zamanlayıcı kalktığında ve uyanıklık suyu yenilenmediğinde otomatik olarak kullanım süresi dolar. Bahsettiğiniz "güvenli yol" olmalı.
Izzy

Yanıtlar:


37

Etkilendiğimi nasıl söyleyebilirim?

Bu, muhtemelen bu konuyla aşina olmayanlara ilk soru. Zencefilli kurabiye (Android 2.3) ve üzeri ile, anlamanıza yardımcı olacak bir hizmetiniz var: pil istatistikleri. Üreticiler farklı noktalara yerleştirme eğiliminde olsalar da, çoğunlukla Ayarlar → Telefon hakkında → Batarya veya benzerleri bölümünde bulunur ve bataryanızın çoğunu kullanan uygulamaların bir listesini gösterir. Bunun üzerine küçük bir grafik. Ona dokunun ve sizi buna benzer bir ekrana getirir:

pil istatistikleri
Android 2.3'de pil istatistiklerinin ekran görüntüsü

Bu sorunu gösteren cihazlarımdan birinin ekran görüntüsünü seçtim. Alttaki iki mavi çubuğa bakarak ("Aktiv" = Cihaz uyanık (aktif), "Bildschirm a" = "Ekran açık"), "Aktiv" üzerindeki en sağdaki mavi çubuk WakeLock'u gösteriyor: Cihaz buna rağmen meşgul Ekranın kapalı olduğu gerçeği. Bu sayede bir WakeLock'a sahip olduğumuzdan emin olabiliriz - ama kimin neden verdiğini söyleyemeyiz.

Cihazınız bu ekranı sunmuyorsa (veya alttaki çubuklar: Android 4.0.3'u çalıştıran örneğin LG 4.0.3 ve 4 Android bu barları kestiğini keşfettim ), örneğin GSam Pil Monitörü kullanarak bunları bulabilirsiniz :

GSam Batarya Monitörü
GSam Pil Monitörü'nden benzer bilgiler - burada belirtilen "mavi çubuklar" sarı / turuncu

WakeLock'a ne neden oldu?

Ne yazık ki, bu soru önceden yüklenmiş uygulamalar kullanılarak cevaplanamaz (bazı Özel ROM'lar hariç). Ancak yapabilen araçlar var. Bunun için en iyi bilinen aday BetterBatteryStats ve bize kısmi uyanıklıklar bölümünde nedenini gösteriyor :

BetterBatteryStats BetterBatteryStats2
BetterBatteryStats'in ekran görüntüleri

İlk örnek 2'de (uygulamanın playstore sayfasından alınmıştır) WakeLocks'ın çoğuna neden olan olay istenen bir olaydı: Müzik dinlerken çalmanın durdurulmasını istemiyoruz. Bu yüzden ikinci örnek 3 (cihazlarımdan birinde gerçek bir davadan alınmış) daha iyi olabilir: en üstteki 3 olay, IMAP push servisini aktif tutmak için WakeLock'a ihtiyaç duyan aynı uygulamadan kaynaklanıyor.

BetterBatteryStats'a bir alternatif olarak , UzumApps'in cevabında belirtilen Wakelock Dedektörü uygulamasına göz atın - ki bu özellikle teknik olmayan kişiler için kullanımı daha kolay:

Wakelock Detector: Uygulama detayları Wakelock Detector: Seçme işlemleri
Wakelock Detector - Büyütmek için resme tıklayın. (Kaynak: Google Play )

Ne yapılabilir?

Durum önceki bölümdeki ikinci örnekte olduğu gibi netse, eylem oldukça açıktır - en azından benim durumumda: bir posta geldiğinde derhal bilgilendirilmeme gerek yok ; 30 dakikalık bir gecikme kesinlikle kabul edilebilir. Bu yüzden posta uygulamasına girdim, IMAP Push'u devre dışı bıraktım (ayrıca bkz: Push Email ) ve bunun yerine 30 dakikalık bir anket aralığına geçtim. WakeLocks tamamen ortadan kalkmadı, ama gözle görülür bir şekilde düştü - pil ömrü gözle görülür şekilde arttı.

Sonra sorunun kendisinde belirtilen durum var: WakeLock'ı serbest bırakmayan kötü davranış gösteren bir uygulama. Geliştirmeden bulgularınızla yüzleşin ve bir düzeltme isteyin. O sunarsa: problem çözüldü. Değilse: Neredeyse her zaman kullanılabilir alternatif bir uygulama var.

Ya Android Sisteminin kendisi ise?

Evet, bazen öyle gözüküyor: Bazı Android servisleri tarafından tüketilen% 98 veya daha fazla. Oh,% 98 ise, çoğu durumda aday LocationManagerService olarak adlandırılır . Kötü adam bize casusluk mu yapıyor? Şart değil. Bu özel durumda, listelenen "kötü adam" suçlu bile değil - en azından doğrudan değil. Burada çok sık güncel konum talep eden başka bir uygulama. Setera.org'da bununla ilgili harika bir makale var: Android LocationManagerService pil tahliyesini saptama . Özet vermek gerekirse: Android kullanıyordumpsysbir sistem durumuna dökmek için özellik (kök gerektirir!) ve LocationManagerService için kurulan dinleyicileri araştırmanızı sağlar. Konfigürasyonlarına daha yakından bakıldığında, konum bilgisi için sürekli olarak "çekiçlediğini" gösteriyor (bazıları bunu kalıcı olarak, yani ara vermeden yapıyor). Uygulamanın kimliği listelenirken ve uygulamaların teknik adıyla birlikte çöplükteki başka bir yerde bile tanımlayabilir ve uygun işlemleri yapabilirsiniz.

Peki ya UFO'lar?

Ne yazık ki, var: Bir WakeLock'u kaydeden Uygulamalar - ve ardından bırakmadan çıkıldı. Geride kalanlar * Kullanılmayan F *** Eski Ürünler * - Uyandırmayan kullanım için tutulan. Dolayısıyla, uygulamayı ön plana çıkarmanın ve yeniden yapılandırmanın ya da WakeLocks'unu serbest bırakmanın hiçbir yolu yoktur.

Burada benim için bilinen tek çözüm yeniden başlatma - ve daha iyi bir çözüm istiyorum. Tabii ki, suçlu uygulamayı biliyorsanız, bununla ilgili adımlar yukarıdakiyle aynıdır: dev'i bilgilendirin, düzeltin ya da uygulamayı değiştirin. Ama şu anki WakeLock'tan kurtulmak hakkında ? Belki başka biri yeniden başlatmaya daha iyi bir alternatif sağlayabilir?

Önerilen başka okumalar var mı?

Elbette. Şimdilik bir tane, daha sonra ekleyebilirim:


2
Geliştiriciler için daha iyi bir eğitim ... "Onlarla işiniz bittiğinde uyanıkları serbest bırakın ve kendinizden sonra temizleyin"?
t0mm13b

3
Her zaman olduğu gibi çarpıcı cevabınız için benden oy !!! Bundan hiç bıkmadın, değil mi? : D
t0mm13b

2
Tabii - ama benim soruya bakın: Ben açıkça ediyorum DEĞİL ancak, geliştirici tarafında soran bir kullanıcılar açısından . Belki daha da belirginleştirmem gerekir;)
Izzy

1
Canı sıkkın? Birisi lütfen bunun nasıl bir şey olduğunu açıklayabilir mi? XD Hayır, aklımda her zaman bir şey var. Yeterince iyi olduğunu hissedersem, burada bile soruyorum (profilime bakınız: sık sormuyorum), ancak (kısmi) bir yanıtım olabilir. Buradaki geri bildirim, eğer soru buna
değerse

1
Lütfen yap! Ve bulgularını rapor et! Az önce "artık" WakeLocks ile açıklanan sorunu yaşadım. Bir saat boyunca alay etmek, LocationManagerService olduğunu görmekten daha fazla alamadım . Güncellemeler için kayıtlı tüm 0sn (sic!) Android Ayarlarıydı (=: - 0). Çıktım, durdurdum, komut satırında öldürdüm ... kilitlerden kurtulmanın yolu yok. WTF Ayarlar orada mı yaptı? Elbette bir yeniden başlatma sorunu çözdü - ama bu günde iki kez yeniden başlatmamız gereken bir Windows Phone mu?
Izzy

6

Kısacası, bu çok iyi bir soru ama korkarım ki, son kullanıcının farkında olmasını sağlamaktan fazlasını garanti ediyor!

Uyandırma kilitlerini ortadan kaldırmak için çekirdeği yeniden tasarlayın ve pil ömrünü uzatan prensibi daha iyi yönetmek için daha etkili bir yol kullanın.

Ne yazık ki, tam olarak verimli olmasa da "güç yönetimini" mümkün kılmak için fiili bir çözüm olarak kabul edildi! Wakelocks (Gregh Kroah Hartman ile - sürücülerin geliştirilmesinde Linux gurusu - tam bağ için googling), LWN.net gibi diğer siteler ve burada aynı sitede açıklanan başka bir makale hakkında kapsamlı bir tartışma yapıldı . Bu, Gregh Kroah Hartman'ın , Rafael J. Wysocki'nin önerdiği alternatif çözüm ile aynı fikirde olduğunu düşündüğü bu bloga atıfta bulunulan makalesiydi . Bunun daha modern bir çekirdek v3.xx'de bulunduğundan emin değilim.

Kötü tasarlanmış uygulamalar, ekranı açık tutmak gibi sık sık wakelocks isteyebilir, ancak gerçekte, ekranı açık tutmak için bu senaryoda, aslında bunu yapmanın daha etkili bir yolu vardır:

getWindow().addFlags(LayoutParams.FLAG_KEEP_SCREEN_ON);

Son kullanıcı için bu jargondan uzak durmaya çalışırken, gerçekten konunun çekirdeği wakelock'ların nasıl yönetildiğinin çekirdek koduna kadar iniyor.

İşte XDA hakkında, başlatılmamışlar için neyin uyanık olduğunun kısa bir özeti . BetterBatteryStats kullanarak , pilin boşalmakta olduğu işlem tam olarak görülebiliyordu , wiki github'da barındırılıyor ve burada piyasada mevcut .


1
Komik bahsettiğim aynı XDA konuya işaret. Sistemin daha iyi bakması gerektiğine katılıyorum (örneğin, artık çalışmayan uygulamalar tarafından istenen WakeLocks’i serbest bırakarak). Ve bu geliştiricilerin kodlamaya daha iyi dikkat etmeleri gerekir (açıkça Yaşam Döngüsü'nün uygun durumlarında onları serbest bırakarak). Ancak bu bize kullanıcıların bilmesine yardımcı olmuyor . Umarım cevabım, bir kullanıcının neler yapabileceği hakkında bir fikir verir - ve "teknisyenler "inizden birinin bıraktığı boşluğu doldurabilir!
Izzy

3

Wakelock Detector: XDA-Developers / Google Play’e göz atın :

Wakelock dedektörü, daha iyi bir görünüm için uygulamanın wakelocks'ını genişletilebilir bir görünümde gruplandırır. Ve hangi uygulamaların çalıştığını gösterir. Ve uygulamanın genişletilmiş görünümünde kill kaldırma bilgi düğmeleri vardır.

Wakelock Detector: Uygulama detayları Wakelock Detector: Seçme işlemleri
Büyütmek için resme tıklayın. (Kaynak: Google Play )

Açıklama: Bu uygulama için sorumlu geliştiriciden biriyim. Dört proje daha benimle birlikte bu proje üzerinde hobi olarak çalışıyor.


Teşekkür ederim! Bu gerçekten de değerli bir bilgi. Cevabınıza biraz daha detay eklemek ister misiniz, örneğin, bu kadar özel yapan ne? O zaman bazı ekran görüntüleri eklerdim. Bu iş bitene kadar: İşte uygulamanın Playstore bağlantısı ...
Izzy

Detaylar için teşekkür ederim! Onları cevabınıza birleştirdim, umarım sakıncası yoktur :) Anlama sorusu: Bir uygulama "0 saniye" aralığını kullanarak konumu sorgular. Bu, LocationService'in cihazı uyandırmasına neden olur . Misiniz Kilit Dedektör Wake veya - gerçek nedeni olarak o sorumlu uygulamayı göstermek LocationService o uygulamalar paketinin bir parçası olmadığından,?
Izzy

Sorunuzun cevabı 'hayır' dır çünkü wakelock dedektörü aynı uygulama paket adına ait wakelocks gruplarını kullanır. Konum Servisi android
os'a

Çok teşekkürler! "Android Sistemin kendisi ise ne olacak?" Diye kolay bir çözüm bulmayı umuyordum. Bölüm. Öyle bir şey yok gibi görünüyor - ama eğer mümkünse, WLD ile bütünleşmek iyi bir fikir olabilir :)
Izzy

2
Fikriniz için teşekkür ederim, düşüneceğim ve üzerinde çalışacağım. WLD iyi görünüyor !!! :)
UzumApps

1

Köklendirilmemiş cihaz kullanıcılarına yardımcı olacak birkaç yol

  1. Uygulamanın geliştiricilerinden biri olan @Uzumapps'ın Wakelock Detektörü ( WLD ) kullanarak bir çözüm yolladığını görünce, Wakelock Dedektörü Işığı adı verilen kök olmadan da kullanılabilecek uygulamayı kullanma konusunda güncelleme yapmadığıma şaşırdım ! Bunun yeni cihazım için bir çözüm aradığını keşfettim (köksüz).

Bu yeni bir gelişmedir ve bu nedenle köksüz cihaz kullanıcıları için bunu yayınlamaktadır. Moto X Play üzerinde çalışırken test edildi (Android 6.0.1)

Not: İkinci yöntemin çalışmasını sağlayamadım, benim gibi anlayışlı olmayan adamlar için çalışması için düzenleme çözümünü memnuniyetle karşılıyoruz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.