Hibernasi Aplikasi

Rata-rata pengguna Android menginstal 50+ aplikasi di perangkat mereka (jumlahnya meningkat seiring dengan peningkatan RAM-tier perangkat). Namun, sejumlah besar aplikasi ini tidak digunakan oleh pengguna untuk jangka waktu yang lama.

Aplikasi hibernasi aplikasi yang tidak digunakan pengguna selama beberapa bulan, mirip dengan pencabutan izin otomatis. Tindakan ini akan menghentikan aplikasi secara paksa dan menempatkannya ke kondisi yang kami optimalkan untuk penyimpanan, bukan performa. Pencabutan otomatis izin juga dibundel dengan status ini dan mereka berbagi setelan pengecualian yang sama di Setelan . Aplikasi yang dihentikan paksa tidak menjalankan tugas atau peringatan di latar belakang dan tidak dapat mengirim pemberitahuan push. Saat pengguna menggunakan aplikasi lagi, aplikasi keluar dari mode hibernasi dan pekerjaan/peringatan/pemberitahuan berjalan lagi seperti biasa. Pekerjaan/peringatan/pemberitahuan apa pun yang dijadwalkan sebelum aplikasi masuk ke mode hibernasi perlu dijadwalkan ulang.

OEM yang memodifikasi platform mungkin bertentangan dengan implementasi hibernasi aplikasi. Sebagai contoh

  • Memodifikasi definisi penggunaan aplikasi atau memperkenalkan cara membangunkan aplikasi yang tidak ada di AOSP dapat mengganggu akurasi hibernasi aplikasi
  • Mekanisme pembatasan hak milik OEM yang mirip dengan hibernasi aplikasi dapat melakukan tujuan yang sama. Meskipun keduanya bisa ada, mungkin ada beberapa yang tumpang tindih.

CDD menguraikan serangkaian persyaratan baru untuk perubahan yang didasarkan pada penggunaan aplikasi, serupa dengan persyaratan 3.5.1 yang ada. Hibernasi aplikasi mengikuti persyaratan ini.

Kode kerangka kerja tinggal di:

Logika kebijakan hidup di:

  • repo: platform/paket/modul/Izin
  • direktori: PermissionController/src/com/android/permissioncontroller/hibernation

Arsitektur tingkat tinggi

Layanan sistem Hibernasi Aplikasi mengoptimalkan aplikasi yang jarang digunakan pengguna untuk penyimpanan dan mencegah aplikasi tersebut berjalan di latar belakang. Untuk mencapai hasil ini, saat kami hibernasi aplikasi, kami secara khusus:

  • Cabut izin secara otomatis
  • Paksa-Hentikan aplikasi
  • Hapus file ODEX dan VDEX
  • Hapus cache aplikasi

Tujuan kami adalah menerapkan hibernasi sebagai tindakan yang dapat dibalik sehingga aplikasi masih tersedia bagi pengguna melalui Peluncur dan permukaan lain dengan data aplikasi utuh. Setelah meluncurkan aplikasi, kami akan memulihkannya kembali dari status penghentian paksa dan melanjutkan pembuatan file ODEX dan VDEX seperti biasa.

Desain yang direncanakan berpusat di sekitar dua bagian utama:

  • menentukan kapan sebuah paket harus hibernasi
  • mengoptimalkan paket hibernasi

Layanan sistem baru, AppHibernationService , dan layanan pekerjaan, AppHibernationJobService, di PermissionController adalah perekat yang mengontrol pengambilan keputusan dan logika secara keseluruhan.

Menentukan kapan sebuah paket harus hibernasi terutama didukung oleh UsageStatsService dan dikelola oleh AppHibernationJobService di PermissionController . Logika kebijakan ini ada di PermissionController untuk memungkinkan kami memperbarui secara dinamis melalui Mainline. Selain itu, kami berencana menambahkan sinyal baru, penggunaan komponen, untuk menangkap penggunaan komponen paket (misalnya, layanan, penyedia konten) sebagai metrik baru di UsageStatsService .

Mengoptimalkan paket adalah tempat semua penghematan/pengoptimalan yang sebenarnya terjadi. AppHibernationService berkomunikasi dengan berbagai bagian sistem untuk menghentikan paket, menghapus data cache, menghapus artefak ART, dan sebagainya. Pencabutan izin dimulai langsung dari AppHibernationJobService untuk mempertahankan fungsionalitas pencabutan otomatis di perangkat Android 11 dan yang lebih rendah.

Pengalaman pengguna

Pengguna diberikan informasi dan kontrol atas aplikasi mana yang dapat dihibernasi.

Mirip dengan pencabutan otomatis, pengguna mendapat pemberitahuan tentang aplikasi mana yang dihibernasi dan memiliki opsi untuk membuka Pengaturan langsung dari pemberitahuan untuk membuka aplikasi dan mengeluarkannya dari hibernasi atau menghapus aplikasi yang tidak digunakan jika diperlukan.

Kami terus mendukung maksud pengembang untuk meminta pengecualian kepada pengguna dari hibernasi melalui maksud pembebasan otomatis pencabutan izin yang ada.

Kompatibilitas terbalik

Fitur khusus hibernasi tersedia mulai Android 12. Fitur ini tidak dapat berfungsi pada versi sebelumnya karena komponen platform (seperti. layanan sistem baru) tidak ada. Pencabutan otomatis terus berfungsi seperti yang diterapkan saat ini untuk versi OS sebelumnya.

Memulai Android 12, untuk memastikan kompatibilitas mundur, sakelar hibernasi ditambahkan pada halaman aplikasi di bawah Aplikasi & pemberitahuan di Pengaturan sambil mempertahankan sakelar pencabutan otomatis asli dalam sub-menu Izin . Pengalih ini mengontrol pengecualian sistem Hibernasi Aplikasi secara keseluruhan untuk aplikasi tersebut.

Menyesuaikan

Karena beberapa implementasi merupakan bagian dari komponen sistem modular, mitra tidak disarankan untuk memodifikasi fitur tersebut. Mitra dapat menerapkan fitur/fungsi serupa selama mereka mengikuti persyaratan CDD.

Hibernasi aplikasi harus AKTIF secara default untuk semua aplikasi yang menargetkan Android 11 atau lebih tinggi. Ini sama dengan pencabutan izin secara otomatis. Meskipun pengaturan itu sendiri mungkin AKTIF, penerapan hibernasi aplikasi mungkin berbeda antara aplikasi yang menargetkan Android 11 versus Android 12. Lebih khusus lagi, hibernasi aplikasi hanya berfungsi untuk aplikasi yang menargetkan Android 11 sedangkan pada dasarnya hanya pencabutan otomatis untuk aplikasi yang menargetkan Android 12.

Selain itu, OEM mungkin menerapkan fitur serupa. Namun, fitur-fitur tersebut ditargetkan pada skala waktu yang jauh lebih pendek untuk pengoptimalan baterai yang dapat menjadi khusus OEM. Semua fitur pembatasan aplikasi serupa yang dikembangkan oleh OEM dapat berdampingan dengan sistem Hibernasi Aplikasi selama fitur tersebut memenuhi kriteria yang ada yang ditentukan dalam CDD .

Pengujian

Hibernasi aplikasi memiliki CTS dan pengujian unit untuk memastikannya berfungsi dengan benar.