Hibernasi Aplikasi

Rata-rata pengguna Android memasang 50+ aplikasi di perangkat mereka (jumlahnya meningkat seiring dengan meningkatnya 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 izin otomatis. Tindakan ini menghentikan paksa aplikasi dan menempatkannya pada kondisi di mana kami mengoptimalkan penyimpanan, bukan kinerja. Pencabutan izin otomatis juga disertakan dengan status ini dan keduanya berbagi setelan pengecualian yang sama di Setelan . Aplikasi yang dihentikan paksa tidak menjalankan tugas atau peringatan di latar belakang dan tidak dapat mengirimkan pemberitahuan push. Saat pengguna menggunakan aplikasi lagi, aplikasi keluar dari hibernasi dan pekerjaan/peringatan/pemberitahuan berjalan kembali seperti biasa. Pekerjaan/peringatan/pemberitahuan apa pun yang dijadwalkan sebelum aplikasi memasuki mode hibernasi perlu dijadwalkan ulang.

OEM yang memodifikasi platform mungkin mengalami konflik dengan penerapan hibernasi aplikasi. Misalnya

  • Memodifikasi definisi penggunaan aplikasi atau memperkenalkan cara untuk mengaktifkan aplikasi yang tidak ada di AOSP dapat mengganggu keakuratan hibernasi aplikasi
  • Mekanisme pembatasan milik OEM yang mirip dengan hibernasi aplikasi dapat melakukan tujuan serupa. Meskipun keduanya bisa ada, mungkin ada beberapa hal yang tumpang tindih.

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

Kode kerangka kerja ada di:

Logika kebijakan ada di:

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

Arsitektur tingkat tinggi

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

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

Tujuan kami adalah menerapkan hibernasi sebagai tindakan yang dapat dibalik sehingga aplikasi tetap tersedia bagi pengguna melalui Peluncur dan platform lain dengan data aplikasi yang utuh. Setelah meluncurkan aplikasi, kami akan mengembalikannya dari keadaan force-stop dan melanjutkan pembuatan file ODEX dan VDEX seperti biasa.

Desain yang direncanakan berpusat pada dua bagian utama:

  • menentukan kapan suatu 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 suatu 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 mencatat penggunaan komponen paket (misalnya, layanan, penyedia konten) sebagai metrik baru di UsageStatsService .

Mengoptimalkan paket adalah tempat semua penghematan/optimasi 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 fungsi 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 notifikasi tentang aplikasi mana yang dihibernasi dan memiliki opsi untuk membuka Pengaturan langsung dari notifikasi untuk membuka aplikasi dan mengeluarkannya dari hibernasi atau menghapus aplikasi yang tidak digunakan jika diperlukan.

Kami terus mendukung niat pengembang untuk meminta pengecualian dari hibernasi kepada pengguna melalui maksud pengecualian pencabutan otomatis 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.

Mulai Android 12, untuk memastikan kompatibilitas mundur, tombol hibernasi ditambahkan pada halaman aplikasi di bawah Aplikasi & notifikasi di Pengaturan sambil mempertahankan tombol pencabutan otomatis asli dalam submenu Izin . Tombol ini mengontrol pengecualian sistem Hibernasi Aplikasi secara keseluruhan untuk aplikasi.

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 seharusnya AKTIF secara default untuk semua aplikasi yang menargetkan Android 11 atau lebih tinggi. Ini sama dengan pencabutan izin otomatis. Meskipun pengaturannya sendiri mungkin AKTIF, penerapan hibernasi aplikasi mungkin berbeda antara aplikasi yang menargetkan Android 11 dan Android 12. Lebih khusus lagi, hibernasi aplikasi hanya berfungsi untuk aplikasi yang menargetkan Android 11, padahal 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 singkat untuk pengoptimalan baterai yang mungkin khusus untuk OEM. Fitur pembatasan aplikasi serupa yang dikembangkan oleh OEM dapat digunakan bersama dengan sistem Hibernasi Aplikasi selama fitur tersebut memenuhi kriteria yang ditentukan dalam CDD .

Pengujian

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