Takılı kalan kısmi uyanık kalma kilitleri

Kısmi uyanık kalma kilitleri, PowerManager API bir cihazın ekranı kapandıktan sonra da geliştiricilerin CPU'yu çalışmaya devam etmesini sağlayan (sistem zaman aşımı veya kullanıcının güç düğmesine basması nedeniyle) Sizin uygulama, telefon ederek kısmi bir uyanık kalma kilidi edinir acquire() şununla: PARTIAL_WAKE_LOCK tıklayın. Kısmi bir uyanık kalma kilidi şu şekilde olur: takılı kalır. arka plan (uygulamanızın hiçbir bölümü kullanıcı tarafından görülemez). Bu koşul, bitkinin düşük güce girmesini önlediği için cihazın pili eyaletler. Kısmi uyanık kalma kilitleri yalnızca gerektiğinde kullanılmalıdır. kısa sürede kullanmaya başlayabilirsiniz.

Uygulamanızda takılı kalan bir kısmi uyanık kalma kilidi varsa bu sayfadaki yönergeleri kullanabilirsiniz tekniklerin kullanılmasıdır.

Sorunu tespit etme

Uygulamanızın kısmi uyanık kalma kilitlerinin takılıp takıldığını her zaman anlamayabilirsiniz. Uygulamanızı zaten yayınladıysanız Android vitals, sorundan haberdar olmanıza yardımcı olabilir.

Android vitals

Android vitals sizi Play Console: sabit kalan kısmi uyanık kalma kilitleri gösterir. Android vitals, kısmi uyanık kalma kilitlerini bildiriyor en az bir saat boyunca, arka plandayken, kısmi uyanıkken takılıp bir pil oturumunda ortaya çıkar.

Pil oturumu tanımı platform sürümüne bağlıdır.

  • Android 10'da pil oturumu, tüm pil raporlarının toplamıdır. toplam 100.000 ABD dolarıdır. Pil raporu, cihazın %20'nin altında ile% 80'in üzerinde arasında veya iki pil şarjı arasındaki %100'e indirebilirsiniz.
  • Android 11'de pil oturumu, 24 saatlik sabit bir süredir.

Gösterilen pil oturumlarının sayısı, ölçülen tüm kullanıcılar için toplam değerdir görebilirsiniz. Google Play'in Android vitals verilerini nasıl topladığı hakkında bilgi edinmek için bkz. "the" Play Console belgelerinden faydalanabilirsiniz.

Uygulamanızda aşırı sayıda takılı kalan uyanık kalma kilidine sahip olduğunu fark ettiğinizde sorunu ele almaktır.

Sorunun çözümü

Uyanık kalma kilitleri Android platformunun ilk sürümlerinde kullanıma sunulmuştu, ancak eskiden uyanık kalma kilitlerinin gerekli olduğu birçok kullanım alanı artık WorkManager gibi yeni API'ler tarafından kullanılır.

Bu bölüm, uyanık kalma kilitlerinizi düzeltmeye yönelik ipuçları içerir, ancak uzun vadede önerileri uygulamak için uygulamanızı en iyi uygulamalar bölümünü inceleyin.

Kodunuzda uyanık kalma kilidi kazandıran yerleri (ör. newWakeLock(int, String) veya WakefulBroadcastReceiver alt sınıfları içerir. Aşağıda bazı ipuçlarını görebilirsiniz:

  • Uyanık kalma kilidine paketinizi, sınıfınızı veya yöntem adınızı eklemenizi öneririz etiket adıdır. Böylece, kaynağınızdaki konumu kolayca tanımlayabilirsiniz. uyanık kalma kilidinin oluşturulduğu yerle ilişkilidir. Aşağıda bazı ek ipuçları verilmiştir:
    • Ada, kimliği tanımlayabilecek bilgileri (PII) eklemeyin. bir e-posta adresi gibi. Aksi takdirde, cihaz _UNKNOWN değerini kaydeder. yerine uyanık kalma kilidi adını kullanabilir.
    • Sınıf veya yöntem adını programatik olarak almayın (örneğin, getName() aranıyor, çünkü ProGuard tarafından karartılabilir. Bunun yerine dize.
    • Uyanık kalma kilidi etiketlerine sayaç veya benzersiz tanımlayıcı eklemeyin. İlgili içeriği oluşturmak için kullanılan sistem aynı web sitesi tarafından oluşturulan uyanık kalma kilitlerini yöntemi vardır. Çünkü hepsinin benzersiz tanımlayıcıları vardır.
  • Kodunuzun edindiği tüm uyanık kalma kilitlerini serbest bıraktığından emin olun. Bu yapılacak her çağrının acquire() buna karşılık gelen bir release(). Yakalanmama nedeniyle serbest olmayan bir uyanık kalma kilidi örneğini burada bulabilirsiniz özel durum:

    Kotlin

    @Throws(MyException::class)
    fun doSomethingAndRelease() {
        wakeLock.apply {
            acquire()
            doSomethingThatThrows()
            release()  // does not run if an exception is thrown
        }
    }

    Java

        void doSomethingAndRelease() throws MyException {
            wakeLock.acquire();
            doSomethingThatThrows();
            wakeLock.release();  // does not run if an exception is thrown
        }

    Kodun doğru sürümünü aşağıda görebilirsiniz:

    Kotlin

    @Throws(MyException::class)
    fun doSomethingAndRelease() {
        wakeLock.apply {
            try {
                acquire()
                doSomethingThatThrows()
            } finally {
                release()
            }
        }
    }

    Java

        void doSomethingAndRelease() throws MyException {
            try {
                wakeLock.acquire();
                doSomethingThatThrows();
            } finally {
                wakeLock.release();
            }
        }
  • Uyanık kalma kilitlerinin kilidi kapatılır açmaz serbest bırakıldığından emin olun gerekir. Örneğin, arka plana izin vermek için uyanık kalma kilidi kullanıyorsanız tamamlaması için bir sonraki adıma geçmelisiniz. Eğer bir uyanık kalma kilidi açılmadan beklenenden daha uzun süre tutulursa, arka plan görevinizin beklenenden daha uzun sürdüğü anlamına gelebilir.

Koddaki sorunu düzelttikten sonra uygulamanızın doğru şekilde uyandırma sürümünü yayınladığını doğrulayın kilitlerini ayarlamak için şu Android araçlarını kullanabilirsiniz:

  • dumpsys - bir araç . Uyandırma listesinin de yer aldığı güç hizmetinin durumunu görmek için kilitleri, adb shell dumpsys power çalıştır.

  • Pil Tarihçisi - Android hatasının çıkışını ayrıştıran araç projenizin görsel bir temsiline güçle ilgili etkinlikler.

En iyi uygulamalar

Uygulamanız genel olarak kısmi uyanık kalma kilitlerinden kaçınmalıdır çünkü Kullanıcının pilini bitirir. Android, neredeyse her cihaz için alternatif API'ler önceden kısmi bir uyanık kalma kilidi gerektiren kullanım alanı içerir. Kalan bir kullanım alanı bir müzik uygulamasının çalmaya devam etmesini sağladığından kısmi uyanık kalma kilitleri için ekran kapalı. Görevleri çalıştırmak için uyanık kalma kilitleri kullanıyorsanız şunları göz önünde bulundurun: arka plan işleme kılavuzunda açıklanan alternatifler arasından.

Kısmi uyanık kalma kilitleri kullanmanız gerekiyorsa aşağıdaki önerileri uygulayın:

  • Uygulamanızın bir kısmının ön planda kaldığından emin olun. Örneğin, bir hizmet çalıştırmanız gerekiyorsa ön plan başlatın hizmeti kullanmanızı öneririz. Bu kullanıcıya uygulamanızın hâlâ çalıştığını belirtir.
  • Uyanık kalma kilitlerini edinme ve bırakma mantığının olabildiğince basit olduğundan emin olun. yapmasını sağlar. Uyanık kalma kilidi mantığınız karmaşık durum makinelerine bağlandığında, zaman aşımları, yürütücü havuzları ve/veya geri çağırma etkinlikleri, mantığı, uyanık kalma kilidinin beklenenden daha uzun süre tutulmasına neden olabilir. Bu hatalar ve hata ayıklaması zordur.
ziyaret edin. ziyaret edin.