Önbelleğe alınan uygulamaları dondurma

Android 11 QPR3 veya sonraki sürümler, önbelleğe alınmış uygulamaları dondurma özelliğini destekler. Bu özellik, önbelleğe alınan işlemlerin yürütülmesini durdurur ve önbelleğe alınmış durumdayken çalışmaya çalışan hatalı uygulamaların kaynak kullanımını azaltır. Çerçeve, süreçlerini dondurulmuş bir cgroup'a taşıyarak önbelleğe alınmış uygulamaları dondurur. Bu, etkin önbelleğe alınmış uygulamalar varken etkin ve boşta CPU tüketimini azaltır. Uygulama dondurucu, sistem yapılandırma işareti veya geliştirici seçeneği kullanılarak etkinleştirilebilir.

Uygulama dondurucuyu kullanma

Önbelleğe alınmış uygulamaları dondurma özelliği, çekirdek cgroup v2 dondurma özelliğinden yararlanır. Uyumlu bir çekirdekle gönderilen cihazlarda bu özellik (isteğe bağlı olarak) etkinleştirilebilir. Bunun için "Önbelleğe alınmış uygulamalar için yürütmeyi askıya al" geliştirici seçeneğini etkinleştirin veya cihaz yapılandırma bayrağını activity_manager_native_boot use_freezer true olarak ayarlayın. Örneğin:

adb shell device_config put activity_manager_native_boot use_freezer true && adb reboot

use_freezer işareti false olarak ayarlandığında veya geliştirici seçeneği devre dışı bırakıldığında dondurucu devre dışı bırakılır. Bu ayarı, bir yazılım sürümünde veya güncellemede cihaz yapılandırmasını değiştirerek açıp kapatabilirsiniz.

Uygulama dondurucu, resmi API'leri kullanıma sunmaz (ve referans uygulama istemcisi yoktur) ancak gizli sistem API'leri setProcessFrozen ve enableFreezer'yi kullanır. Bu API'lerle ilgili ayrıntılar için ActivityManager'ın Process.java ve ActivityManagerService API'sine bakın. Geliştiriciler, denemeler için ActivityManager içindeki istemci koduna da başvurabilir.

Özel özellikleri işleme

Genellikle, işlemler önbelleğe alındığında herhangi bir iş yapması beklenmez ancak bazı uygulamalarda, önbelleğe alınmış durumdayken çalışması beklenen işlemler tarafından desteklenen özel özellikler olabilir. Bu tür bir uygulamanın çalıştığı cihazda uygulama dondurucu etkinleştirildiğinde, önbelleğe alınmış işlemler dondurulur ve özel özelliklerin çalışmasını engelleyebilir.

Geçici çözüm olarak, bir uygulamanın önbelleğe alınmış durumdayken etkinlik gerçekleştirmesi gereken bir işlemi varsa uygulamanın etkin kalmasına izin vermek için işlem herhangi bir iş yapmadan önce işlem durumunu önbelleğe alınmamış olarak değiştirin (ör. Bound ForeGround Service (BFGS) veya ön plan).

Uygulama dondurucuyu test etme

Uygulama dondurucunun beklendiği gibi çalıştığını doğrulamak için aşağıdaki kaynakları kullanın:

  • adb shell dumpsys activity komutunu kullanarak dondurulmuş işlemlerin listesini kontrol edin ve Apps frozen: için grep komutunu çalıştırın.

  • /sys/fs/cgroup/uid_0/cgroup.freeze dosyasının olup olmadığını kontrol edin.

  • Bir işlem dondurucuya her taşındığında veya dondurucudan her çıktığında dondurulmuş ve dondurulmamış girişleri gösteren logcat'i görüntüleyin. Örneğin:

    adb logcat | grep -i "\(freezing\|froze\)"