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
  • Uygulama hazırda bekletme moduna benzer bir OEM'in 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 takip eder.

Ç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 AppHibernationJobService ve PermissionController UsageStatsService tarafından yönetilir. Bu ilke mantığı, Mainline aracılığıyla dinamik olarak güncelleme yapmamıza izin vermek için PermissionController yaşar. Ayrıca, KullanımStatsService içinde paketin bileşenlerinin (örneğin hizmetler, içerik sağlayıcılar) kullanımını yeni bir metrik olarak yakalamak için yeni bir sinyal, bileşen kullanımı eklemeyi UsageStatsService .

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çıp 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 başlayarak, geriye dönük uyumluluğu sağlamak için, İzinler alt menüsünde orijinal otomatik iptal geçişini korurken, 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 takip ettikleri 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 uygulamalara karşı Android 11'i hedefleyen uygulamalar arasında farklılık gösterebilir (yani, uygulama hazırda bekletme modu yalnızca Android 11'i hedefleyen uygulamalar için çalışır, oysa esasen yalnızca Android 11'i 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.