Hibernasi aplikasi

Pengguna Android rata-rata menginstal lebih dari 50 aplikasi di perangkat mereka (jumlahnya meningkat seiring dengan peningkatan tingkat RAM perangkat). Namun, sejumlah besar aplikasi ini tidak digunakan oleh pengguna dalam jangka waktu yang lama.

Hibernasi aplikasi menghibernasi aplikasi yang tidak digunakan pengguna selama beberapa bulan, mirip dengan pencabutan otomatis izin. Tindakan ini akan menghentikan aplikasi secara paksa dan menempatkannya ke dalam status saat kita mengoptimalkan penyimpanan, bukan performa. Pencabutan otomatis izin juga disertakan dengan status ini dan keduanya memiliki setelan pengecualian yang sama di Setelan. Aplikasi yang dihentikan paksa tidak menjalankan tugas atau pemberitahuan di latar belakang dan tidak dapat mengirim notifikasi push. Saat pengguna menggunakan aplikasi lagi, aplikasi akan keluar dari hibernasi dan tugas/pemberitahuan/notifikasi akan berjalan lagi seperti biasa. Tugas/pemberitahuan/notifikasi apa pun yang dijadwalkan sebelum aplikasi beralih ke hibernasi perlu dijadwalkan ulang.

OEM yang mengubah platform dapat bertentangan dengan penerapan hibernasi aplikasi. Misalnya

  • Mengubah definisi penggunaan aplikasi atau memperkenalkan cara mengaktifkan aplikasi yang tidak ada di AOSP dapat mengganggu akurasi hibernasi aplikasi
  • Mekanisme pembatasan eksklusif OEM yang serupa dengan hibernasi aplikasi dapat menjalankan tujuan yang serupa. Meskipun keduanya dapat ada, mungkin ada beberapa 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 berikut.

Kode framework berada di:

Logika kebijakan berada di:

  • repo: platform/packages/modules/Permission
  • directory: 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 menidurkan aplikasi, kami secara khusus:

  • Mencabut izin secara otomatis
  • Menghentikan aplikasi secara paksa
  • Menghapus file ODEX dan VDEX
  • Menghapus cache aplikasi

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

Desain yang direncanakan berpusat pada dua bagian utama:

  • Menentukan kapan paket harus dalam mode hibernate
  • Mengoptimalkan paket hibernasi

Layanan sistem baru, AppHibernationService, dan layanan tugas, AppHibernationJobService, diPermissionController adalah perekat yang mengontrol keseluruhan pengambilan keputusan dan logika.

Penentuan kapan paket harus dalam mode hibernasi terutama didukung oleh UsageStatsService dan dikelola oleh AppHibernationJobServicedi PermissionController. Logika kebijakan ini ada di PermissionController untuk memungkinkan kami melakukan update secara dinamis melalui Mainline. Selain itu, kami berencana menambahkan sinyal baru, penggunaan komponen, untuk merekam penggunaan komponen paket (misalnya, layanan, penyedia konten) sebagai metrik baru di UsageStatsService.

Pengoptimalan paket adalah tempat terjadinya semua penghematan dan pengoptimalan yang sebenarnya. 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 fungsi pencabutan otomatis di perangkat Android 11 dan yang lebih rendah.

Pengalaman pengguna

Pengguna akan mendapatkan informasi dan kontrol terkait aplikasi yang dapat di-hibernate.

Mirip dengan pencabutan otomatis, pengguna akan mendapatkan notifikasi tentang aplikasi mana yang ditidurkan dan memiliki opsi untuk membuka Setelan langsung dari notifikasi untuk membuka aplikasi dan mengeluarkannya dari mode tidur atau menghapus aplikasi yang tidak digunakan jika diperlukan.

Kami terus mendukung maksud developer untuk meminta pengguna memberikan pengecualian dari hibernasi dengan maksud pengecualian pencabutan otomatis izin yang ada.

Kompatibilitas mundur

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

Mulai Android 12, untuk memastikan kompatibilitas mundur, tombol hibernasi ditambahkan di halaman aplikasi pada bagian Aplikasi & notifikasi di Setelan sekaligus mempertahankan tombol pencabutan otomatis asli dalam sub-menu Izin. Tombol ini mengontrol pengecualian sistem hibernasi aplikasi secara keseluruhan untuk aplikasi.

Penyesuaian

Beberapa implementasi adalah bagian dari komponen sistem modular, sehingga partner tidak disarankan untuk mengubah fitur ini. Partner dapat menerapkan fitur atau fungsi serupa selama mereka mematuhi persyaratan CDD.

Penonaktifan aplikasi harus diaktifkan secara default untuk semua aplikasi yang menargetkan Android 11 atau yang lebih tinggi. Hal ini sama dengan pencabutan otomatis izin. Meskipun setelannya sendiri mungkin AKTIF, implementasi hibernasi aplikasi dapat berbeda antara aplikasi yang menargetkan Android 11 dan Android 12. Lebih khusus lagi, penonaktifan 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 tersebut ditargetkan pada skala waktu yang jauh lebih singkat untuk pengoptimalan baterai yang dapat bersifat khusus OEM. Fitur pembatasan aplikasi serupa yang dikembangkan oleh OEM dapat berjalan bersama sistem hibernasi aplikasi selama memenuhi kriteria yang ada yang ditentukan dalam CDD.

Pengujian

Hibernasi aplikasi memiliki CTS dan pengujian unit untuk memastikan fungsinya dengan benar.