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. İzin otomatik Revoke de bu duruma birleştirilmiştir ve onlar Ayarlar aynı muafiyet ayarını paylaşır. 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 benzer uygulama kullanımı dayanmaktadır değişiklikler için gereksinimleri bir dizi yeni özetliyor 3.5.1 gereksinimi. 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

Yeni bir sistem hizmeti, AppHibernationService , ve bir iş servisi, AppHibernationJobService, içinde PermissionController tutkal olduğunu kontroller, genel karar verme ve mantık.

Hazırda bekletme gereken bir paket öncelikle tarafından açıldığında belirleme UsageStatsService ve yönettiği AppHibernationJobService içinde PermissionController . Bu politika mantığı hayatını PermissionController bize dinamik Mainline yoluyla güncellemek için izin vermek. Ayrıca, yeni bir metrik olarak paketin bileşenlerinin yakalama kullanımı (örneğin, hizmetler, içerik sağlayıcılar) için, yeni bir sinyal, bileşen kullanım ekleyerek planı UsageStatsService .

Bir paketi optimize etmek, tüm gerçek tasarrufların/optimizasyonların gerçekleştiği yerdir. AppHibernationService vb paketi durdurmak için sistemin çeşitli yerlerinde, silme önbellek verileri, silme SANAT eserler ve iletişim kurar. İzin iptal direkt olarak başlatıldığı AppHibernationJobService Android 11 ve alt cihazlar ile otomatik iptal et özelliğe korumak için.

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.

İzinler alt menü içinde orijinal oto-Revoke geçiş düğmesini tutarken geriye uyumluluğu sağlamak için, Android 12 başlayarak, bir kış uykusu geçiş Ayarlarında Uygulamalar ve bildirimlerin altında uygulamanın sayfasında 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 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 aslında 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. Herhangi benzer uygulama kısıtlama olabilir OEM'ler tarafından geliştirilen özellikler yeter ki tanımlanan mevcut kriterlere uygun olarak App Uykusu sistemi ile birlikte var CDD .

Test yapmak

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