Uygulamayı hazırda bekletme

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

Uygulama hazırda bekletme özelliği, izinlerin otomatik olarak iptal edilmesine benzer şekilde, kullanıcının birkaç ay boyunca kullanmadığı uygulamaları hazırda bekletir. Bu işlem, uygulamayı zorla durdurur ve performans yerine depolama için optimizasyon yaptığımız bir duruma getirir. İzinlerin otomatik olarak iptal edilmesi özelliği de bu durumla birlikte sunulur ve Ayarlar'da aynı muafiyet ayarını paylaşır. Zorunlu olarak durdurulan uygulamalar arka planda iş veya uyarı çalıştırmaz ve push bildirimi gönderemez. Kullanıcı uygulamayı tekrar kullandığında uygulama uyku modundan çıkar ve işler/uyarılar/bildirimler normal şekilde tekrar çalışır. Uygulama uyku moduna girmeden önce planlanmış tüm işlerin/uyarıların/bildirimlerin yeniden planlanması gerekir.

Platformu değiştiren OEM'ler, uygulamanın uyku moduna geçirilmesi ile çakışabilir. Örneğin

  • Uygulama kullanımı tanımını değiştirmek veya AOSP'de bulunmayan bir uygulamayı uyandırmanın yollarını uygulamak, uygulamanın uyku modunda kalma süresinin doğruluğunu etkileyebilir.
  • OEM'lerin uygulamanın uyku moduna benzer özel kısıtlama mekanizmaları da benzer bir işlev görebilir. Her ikisi de mevcut olabilir ancak bazı noktalarda çakışmalar olabilir.

CDD, mevcut 3.5.1 koşuluna benzer şekilde, uygulama kullanımına dayalı değişiklikler için yeni bir şart grubu belirler. Uygulamanın uyku moduna alınması bu şartlara tabidir.

Çerçeve kodu şu konumlarda bulunur:

Politika mantığı şu yerlerde bulunur:

  • repo: platform/packages/modules/Permission
  • dizin: PermissionController/src/com/android/permissioncontroller/hibernation

Üst düzey mimari

Uygulama hazırda bekleme sistemi hizmeti, kullanıcının sık kullanmadığı uygulamaları depolama alanı için optimize eder ve bu uygulamaların arka planda çalışmasını engeller. Bu sonuçları elde etmek için bir uygulamayı uyku moduna aldığımızda özellikle:

  • İzinleri otomatik olarak iptal etme
  • Uygulamayı zorla durdurma
  • ODEX ve VDEX dosyalarını silme
  • Uygulama önbelleğini silme

Hedefimiz, uygulamanın kullanıcı tarafından başlatıcı ve diğer platformlar üzerinden erişilebilir kalması için uyku modunu geri alınabilir bir işlem olarak uygulamaktır. Bu sayede uygulama verileri bozulmadan kalır. Uygulamayı başlattığınızda, zorla durdurma durumundan geri yükler ve ODEX ile VDEX dosyalarını oluşturmaya normal şekilde devam ederiz.

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

  • Bir paketin ne zaman hazırda bekletmesi gerektiğini belirleme
  • Hazırda bekleme paketini optimize etme

Yeni bir sistem hizmeti olan AppHibernationService ve bir iş hizmeti olan AppHibernationJobService,,PermissionController genel karar verme sürecini ve mantığını kontrol eden bağlayıcıdır.

Bir paketin ne zaman uyku moduna geçmesi gerektiği, temel olarak UsageStatsService tarafından desteklenir ve PermissionController'de AppHibernationJobService tarafından yönetilir. Bu politika mantığı, Mainline üzerinden dinamik olarak güncelleme yapmamıza olanak tanımak için PermissionController içinde yer alır. Ayrıca, paket bileşenlerinin (örneğin, hizmetler, içerik sağlayıcılar) UsageStatsService ürününe yeni bir metrik olarak kullanımını yakalamak için yeni bir sinyal olan bileşen kullanımı şeklinde ekleme yapmayı planlıyoruz.

Paket optimizasyonunda tüm gerçek tasarruf ve optimizasyonlar gerçekleşir. AppHibernationService, paketi durdurmak, önbellek verilerini silmek, ART yapılarını silmek vb. için sistemin çeşitli bölümleriyle iletişim kurar. Android 11 ve önceki sürümleri çalıştıran cihazlarda otomatik iptal işlevini korumak için izin iptal işlemi doğrudan AppHibernationJobService tarafından başlatılır.

Kullanıcı deneyimi

Kullanıcıya hem bilgiler sağlanır hem de hangi uygulamaların hazırda bekletileceğine ilişkin kontroller 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 bekleme modundan çıkarmak veya gerekirse kullanılmayan uygulamayı silmek için bildirimden doğrudan Ayarlar'a gitme seçeneğine sahiptir.

Geliştiricinin, mevcut izinlerin otomatik olarak iptal edilmesinden muafiyet isteğinde bulunmak için kullanıcıdan izin isteme niyetini desteklemeye devam ediyoruz.

Geriye dönük uyumluluk

Uyku moduna özgü özellikler Android 12'den itibaren kullanılabilir. Platform bileşenleri (ör. yeni sistem hizmeti) bulunmadığından bu özellik önceki sürümlerde çalışamazdı. Otomatik iptal, önceki işletim sistemi sürümlerinde uygulandığı şekilde çalışmaya devam eder.

Android 12'den itibaren, geriye dönük uyumluluğu sağlamak için uygulamanın Ayarlar'daki Uygulamalar ve bildirimler bölümünde bir kış uykusu açma/kapatma düğmesi eklendi. Orijinal otomatik iptal açma/kapatma düğmesi ise İzinler alt menüsünde yer almaya devam ediyor. Bu açma/kapatma düğmesi, uygulama için genel uygulama hazırda bekleme sistemi muafiyetini kontrol eder.

Özelleştirme

Uygulamanın bir kısmı modüler sistem bileşeninin parçası olduğundan iş ortaklarının özelliği değiştirmesi önerilmez. İş ortakları, CDD şartlarını karşıladıkları sürece benzer özellikleri veya işlevleri uygulayabilir.

Uygulamanın kış uykusuna yatması özelliği, Android 11 veya sonraki sürümleri hedefleyen tüm uygulamalarda varsayılan olarak AÇIK olmalıdır. Bu, izinlerin otomatik olarak iptal edilmesiyle aynıdır. Ayarın kendisi AÇIK olsa da uygulamanın uyku modu uygulaması, Android 11'i hedefleyen uygulamalar ile Android 12'yi hedefleyen uygulamalar arasında farklılık gösterebilir. Daha ayrıntılı belirtmek gerekirse, uygulama kış uykusu yalnızca Android 11'i hedefleyen uygulamalarda çalışır. Android 12'yi hedefleyen uygulamalarda ise yalnızca otomatik olarak iptal edilir.

Ayrıca OEM'ler de benzer bir özellik uyguluyor olabilir. Ancak bu özelliklerde, OEM'e özgü olabilecek pil optimizasyonları için çok daha kısa bir zaman aralığı hedeflenmektedir. OEM'ler tarafından geliştirilen benzer uygulama kısıtlaması özellikleri, CDD'de tanımlanan mevcut ölçütleri karşıladığı sürece uygulama hazırda bekleme sistemiyle birlikte kullanılabilir.

Test

Uygulamayı hazırda bekletme modunda uygulamanın doğru çalıştığından emin olmak için CTS ve birim testleri bulunur.