Uygulamayı hazırda bekletme

Ortalama bir Android kullanıcısı cihazlarına 50'den fazla uygulama yükler (cihazların RAM düzeyi arttıkça bu sayı da artar). Ancak bu uygulamaların önemli bir kısmı kullanıcı tarafından uzun süre kullanılmadan kalıyor.

Uygulama hazırda bekletme modu, otomatik izin iptaline benzer şekilde, kullanıcının birkaç ay boyunca kullanmadığı uygulamaları hazırda bekletir. Bu, uygulamayı zorla durdurur ve onu performans yerine depolamayı optimize ettiğimiz bir duruma getirir. İzinlerin otomatik olarak iptal edilmesi de bu durumla birlikte gelir ve Ayarlar'da aynı muafiyet ayarını paylaşırlar. Zorunlu olarak durdurulan bir uygulama arka planda işleri veya uyarıları çalıştırmaz ve anında bildirim 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 planlanmış tüm işlerin/uyarıların/bildirimlerin yeniden planlanması gerekir.

Platformu değiştiren OEM'ler, uygulamanın 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ı sunmak, uygulamanın hazırda bekletme modunun doğruluğunu kesintiye uğratabilir
  • Bir OEM'in uygulama hazırda bekletme moduna benzer özel kısıtlama mekanizması da benzer bir amacı gerçekleştirebilir. Her ikisi de mevcut olsa da bazı örtüşmeler de olabilir.

CDD, mevcut 3.5.1 gereksinimine benzer şekilde, uygulama kullanımına dayalı değişiklikler için yeni bir gereksinimler dizisinin ana hatlarını çiziyor. Uygulama hazırda bekletme bu gereksinimlere uygundur.

Çerçeve kodu şurada yaşıyor:

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, kullanıcının sık olmayan uygulamalarını 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 şunları yaparız:

  • İzinleri otomatik olarak iptal et
  • Uygulamayı Durdurmaya Zorla
  • ODEX ve VDEX dosyalarını silin
  • Uygulama önbelleğini silin

Amacımız, hazırda bekletme modunu geri döndürülebilir bir eylem olarak uygulamaktır; böylece uygulamanın, Başlatıcı ve uygulama verilerinin bozulmadığı diğer yüzeyler aracılığıyla kullanıcı tarafından hâlâ kullanılabilir olması sağlanır. Uygulamayı başlattıktan sonra zorla durdurma durumundan geri yükleyeceğiz ve ODEX ve VDEX dosyası oluşturmaya her zamanki gibi devam edeceğiz.

Planlanan tasarım iki ana bölüm etrafında yoğunlaşıyor:

  • 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 AppHibernationJobService, genel karar verme sürecini ve mantığı denetleyen birleştiricidir.

Bir paketin ne zaman hazırda bekletmesi gerektiğinin belirlenmesi, öncelikle UsageStatsService tarafından desteklenir ve PermissionController içindeki AppHibernationJobService tarafından yönetilir. Bu politika mantığı, Mainline aracılığıyla dinamik olarak güncelleme yapmamıza olanak sağlamak için PermissionController bulunur. Ayrıca, UsageStatsService yeni bir ölçüm olarak paketin bileşenlerinin (örneğin, hizmetler, içerik sağlayıcılar) kullanımını yakalamak için yeni bir sinyal olan bileşen kullanımı eklemeyi planlıyoruz.

Bir paketin optimize edilmesi, 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 düşük sürümlere sahip cihazlarda otomatik iptal etme işlevini korumak için doğrudan AppHibernationJobService başlatılır.

Kullanıcı deneyimi

Kullanıcıya hangi uygulamaların hazırda bekletebileceğine ilişkin bilgi ve kontroller sağlanır.

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

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

Geriye dönük uyumluluk

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

Android 12'den başlayarak, geriye dönük uyumluluğu sağlamak için, uygulamanın sayfasına, Ayarlar'daki Uygulamalar ve bildirimler bölümüne bir hazırda bekletme modu düğmesi eklenirken, orijinal otomatik iptal düğmesi İzinler alt menüsünde tutulur. Bu geçiş, uygulamanın genel Uygulama Hazırda Bekletme sistemi muafiyetini kontrol eder.

Özelleştirme

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

Uygulama hazırda bekletme modu, 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, ancak aslında Android 12'yi hedefleyen uygulamalar için yalnızca otomatik olarak iptal edilir.

Ayrıca OEM'ler de benzer bir özelliği uyguluyor olabilir. Ancak bu özellikler, OEM'e özgü olabilen pil optimizasyonları için çok daha kısa bir zaman ölçeğinde hedeflenmektedir. OEM'ler tarafından geliştirilen benzer uygulama kısıtlama özellikleri, CDD'de tanımlanan mevcut kriterleri karşıladıkları sürece Uygulama Hazırda Bekletme sistemiyle birlikte mevcut olabilir.

Test yapmak

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