Uygulama Hazırda Bekletme

Ortalama bir Android kullanıcısı, cihazlarına 50'den fazla uygulama yükler (cihazların RAM seviyesi arttıkça sayı artar). Ancak, bu uygulamaların önemli bir kısmı kullanıcı tarafından uzun süre kullanılmamaktadır.

Uygulama hazırda bekletme modu, izin otomatik iptaline benzer şekilde, kullanıcının birkaç ay boyunca kullanmadığı uygulamaları hazırda bekletir. Bu, uygulamayı zorla durdurur ve performans yerine depolama için optimize ettiğimiz bir duruma getirir. Otomatik izin iptali de bu durumla birlikte gelir ve Ayarlar'da aynı muafiyet ayarını paylaşırlar. Zorla durdurulan bir uygulama, arka planda işleri veya uyarıları çalıştırmaz ve anında iletme bildirimleri gönderemez. Kullanıcı uygulamayı tekrar kullandığında, uygulama hazırda bekletme modundan çıkar ve işler/uyarılar/bildirimler her zamanki gibi yeniden çalışır. Uygulama hazırda bekletme moduna geçmeden önce planlanan tüm işler/uyarılar/bildirimlerin yeniden planlanması gerekir.

Platformu değiştiren OEM'ler, uygulama hazırda bekletme uygulamasıyla çakışabilir. Örneğin

  • Uygulama kullanım tanımını değiştirmek veya AOSP'de olmayan bir uygulamayı uyandırmanın yollarını tanıtmak, uygulama hazırda bekletme modunun doğruluğunu kesintiye uğratabilir
  • Bir OEM'in uygulama hazırda bekletme moduna benzer tescilli kısıtlama mekanizması da benzer bir amacı gerçekleştirebilir. Her ikisi de var olabilirken, bazı örtüşmeler olabilir.

CDD, mevcut 3.5.1 gereksinimine benzer şekilde, uygulama kullanımına dayalı değişiklikler için yeni bir dizi gereksinimi özetlemektedir. Uygulama hazırda bekletme modu bu gereksinimleri izler.

Çerçeve kodu şurada bulunur:

Politika mantığı şu şekilde yaşar:

  • repo: platform/paketler/modüller/İzin
  • dizin: PermissionController/src/com/android/permissioncontroller/hibernation

Üst düzey mimari

Uygulama Hazırda Bekletme sistem hizmeti, bir kullanıcının nadiren kullandığı uygulamaları depolama için optimize eder ve bu uygulamaların arka planda çalışmasını engeller. Bu sonuçları elde etmek için, bir uygulamayı hazırda beklettiğimizde özellikle:

  • Otomatik iptal izinleri
  • Uygulamayı Zorla-Durdur
  • ODEX ve VDEX dosyalarını silin
  • Uygulama önbelleğini silin

Amacımız, hazırda bekletme modunu tersine çevrilebilir bir eylem olarak uygulamaktır, böylece uygulama, Başlatıcı ve uygulama verilerinin bozulmamış olduğu diğer yüzeyler aracılığıyla kullanıcı tarafından kullanılmaya devam eder. Uygulamayı başlattıktan sonra, zorla durdurma durumundan geri yükleyeceğiz ve her zamanki gibi ODEX ve VDEX dosyası oluşturmaya devam edeceğiz.

Planlanan tasarım iki ana bölümden oluşuyor:

  • bir paketin ne zaman hazırda bekletmesi gerektiğini belirleme
  • hazırda bekletme paketini optimize etme

PermissionController yeni bir sistem hizmeti olan AppHibernationService ve bir iş hizmeti olan AppHibernationJobService, genel karar vermeyi ve mantığı kontrol eden yapıştırıcıdır.

Bir paketin ne zaman hazırda bekletmesi gerektiğini belirleme, öncelikle KullanımStatsService tarafından desteklenir ve AppHibernationJobService UsageStatsService PermissionController . Bu ilke mantığı, Mainline aracılığıyla dinamik olarak güncelleme yapmamıza izin vermek için PermissionController yaşar. Buna ek olarak, yeni bir metrik olarak paket bileşenlerinin (örneğin, hizmetler, içerik sağlayıcılar) UsageStatsService içinde yakalamak için yeni bir sinyal, bileşen kullanımı eklemeyi planlıyoruz.

Bir paketi optimize etmek, tüm gerçek tasarrufların/optimizasyonların gerçekleştiği yerdir. AppHibernationService , paketi durdurmak, önbellek verilerini silmek, ART yapıtlarını silmek vb. için sistemin çeşitli bölümleriyle iletişim kurar. İzin iptali, Android 11 ve daha eski cihazlarda otomatik iptal işlevini korumak için doğrudan AppHibernationJobService başlatılır.

Kullanıcı deneyimi

Kullanıcıya, hangi uygulamaların hazırda bekletilebileceği konusunda hem bilgi hem de denetimler sağlanır.

Otomatik iptale benzer şekilde, kullanıcı hangi uygulamaların hazırda bekletildiği hakkında bir bildirim alır ve uygulamayı açmak ve hazırda bekletme modundan çıkarmak veya gerekirse kullanılmayan uygulamayı silmek için doğrudan bildirimden Ayarlar'a gitme seçeneğine sahiptir.

Geliştiricinin, mevcut izinleri otomatik olarak iptal etme muafiyeti amacı aracılığıyla kullanıcıdan hazırda bekletme modundan muafiyet isteme niyetini desteklemeye devam ediyoruz.

Geriye dönük uyumluluk

Hazırda bekletme moduna özgü özellikler Android 12'den itibaren kullanılabilir. Platform bileşenleri (yeni sistem hizmeti gibi) mevcut olmadığından bu özellik önceki sürümlerde çalışamazdı. Otomatik iptal, şu anda önceki işletim sistemi sürümleri için uygulandığı şekilde çalışmaya devam eder.

Android 12'den itibaren, geriye dönük uyumluluğu sağlamak için, İzinler alt menüsünde orijinal otomatik iptal geçişi korunurken, uygulamanın Ayarlar'daki Uygulamalar ve bildirimler altındaki bir hazırda bekleme geçişi eklenir. Bu geçiş, uygulama için genel Uygulama Hazırda Bekletme sistemi muafiyetini kontrol eder.

özelleştirme

Uygulamanın bir kısmı modüler sistem bileşeninin bir parçası olduğundan, ortakların özelliği değiştirmeleri önerilmez. Ortaklar, CDD gerekliliklerini yerine getirdikleri sürece benzer özellikleri/işlevleri uygulayabilirler.

Uygulama hazırda bekletme, Android 11 veya üstünü hedefleyen tüm uygulamalar için varsayılan olarak AÇIK olmalıdır. Bu, izinlerin otomatik olarak iptal edilmesiyle aynıdır. Ayarın kendisi AÇIK olsa da, uygulama hazırda bekletme uygulaması Android 11'i hedefleyen uygulamalar ile Android 12'yi hedefleyen uygulamalar arasında farklılık gösterebilir. Daha spesifik olarak, uygulama hazırda bekletme modu yalnızca Android 11'i hedefleyen uygulamalar için çalışır, oysa aslında yalnızca Android 12'yi hedefleyen uygulamalar için otomatik olarak iptal edilir.

Ek olarak, OEM'ler benzer bir özelliği uyguluyor olabilir. Bununla birlikte, bu özellikler, OEM'e özel olabilen pil optimizasyonları için çok daha kısa bir zaman ölçeğinde hedeflenmiştir. OEM'ler tarafından geliştirilen benzer uygulama kısıtlama özellikleri, CDD'de tanımlanan mevcut kriterleri karşıladıkları sürece App Hibernation sistemiyle birlikte var olabilir.

Test yapmak

Uygulama hazırda bekletme modunda, düzgün çalıştığından emin olmak için CTS ve birim testleri bulunur.