Watchdog memantau penggunaan memori flash dengan melacak total jumlah penulisan I/O disk yang dilakukan oleh semua aplikasi dan layanan menggunakan statistik I/O disk per-UID yang diekspos oleh Kernel di lokasi `/proc/uid_io/stats`. Jika aplikasi atau layanan melampaui batas penggunaan I/O disk yang berlebihan, Watchdog akan mengambil tindakan pada aplikasi atau layanan tersebut. Nilai minimum penggunaan I/O disk dan tindakan yang harus dilakukan jika terjadi penggunaan berlebihan telah ditentukan sebelumnya dalam konfigurasi penggunaan berlebihan I/O disk.
Nilai minimum penggunaan berlebihan
- Threshold penggunaan berlebihan I/O disk diterapkan setiap hari, yaitu, semua penulisan yang dilakukan oleh aplikasi/layanan diagregasi sejak awal hari kalender UTC saat ini dan diperiksa terhadap threshold yang ditentukan dalam konfigurasi penggunaan berlebihan.
- Saat kendaraan dinyalakan beberapa kali dalam sehari, modul Watchdog menyimpan statistik penggunaan I/O disk di memori flash dan menggabungkannya sejak awal hari kalender UTC saat ini.
Tindakan penggunaan berlebihan
Jika aplikasi berulang kali melampaui batas penggunaan I/O disk yang ditentukan, Watchdog akan mengambil tindakan yang ditentukan dalam konfigurasi penggunaan berlebih.
- Semua aplikasi dan layanan vendor dianggap penting untuk stabilitas sistem secara keseluruhan, sehingga tidak dihentikan karena penggunaan I/O disk yang berlebihan. Namun, konfigurasi penggunaan berlebih dapat menentukan daftar aplikasi vendor yang aman untuk dihentikan dan layanan.
- Semua aplikasi pihak ketiga aman untuk dihentikan.
Jika aplikasi atau layanan aman untuk dihentikan, Watchdog akan menonaktifkan aplikasi atau layanan dengan status komponen aplikasi
PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED
.
Konfigurasi penggunaan berlebihan
Konfigurasi penggunaan berlebih berisi tindakan dan nilai minimum penggunaan berlebih I/O disk. Konfigurasi penggunaan berlebihan default ditentukan dalam image sistem dan vendor, serta dikirimkan bersama build. Vendor dapat secara opsional menyertakan konfigurasi vendor dalam image vendor. Jika konfigurasi vendor tidak disediakan, konfigurasi sistem juga akan digunakan untuk aplikasi dan layanan vendor.
Watchdog mengekspos API sistem melalui CarWatchdogManager
, yang memungkinkan aplikasi atau layanan vendor memperbarui konfigurasi vendor kapan saja.
Definisi konfigurasi penggunaan berlebihan
Konfigurasi penggunaan berlebih dibagi berdasarkan jenis komponen, misalnya, sistem, vendor, dan pihak ketiga. OEM hanya boleh memperbarui konfigurasi komponen vendor.
Konfigurasi vendor
Konfigurasi vendor menentukan tindakan dan nilai minimum penggunaan I/O disk yang berlebihan untuk semua aplikasi dan layanan vendor, serta semua aplikasi peta dan media. Konfigurasi berisi kolom konfigurasi di bawah.
- Awalan paket vendor. Semua paket yang diinstal di partisi vendor dianggap sebagai paket vendor. Selain paket ini, vendor dapat mengklasifikasikan paket yang sudah diinstal sebelumnya sebagai paket vendor dengan menambahkan awalan paket ke konfigurasi awalan paket vendor. Konfigurasi ini tidak menerima ekspresi reguler.
- Paket yang aman untuk dihentikan. Vendor dapat menentukan paket vendor mana yang aman untuk dihentikan dengan menambahkan nama paket lengkap ke konfigurasi safe-to-terminate packages.
- Pemetaan kategori aplikasi. Vendor dapat memetakan paket apa pun (termasuk paket pihak ketiga) ke salah satu dari dua kategori aplikasi yang didukung - aplikasi Peta dan Media. Pemetaan ini dilakukan untuk memberikan batas penggunaan I/O disk yang lebih tinggi pada aplikasi peta dan media karena aplikasi ini cenderung mendownload dan menulis lebih banyak data ke disk daripada jenis aplikasi lainnya.
- Batas tingkat komponen. Menentukan nilai minimum umum untuk semua paket vendor (yaitu, paket yang tidak tercakup oleh Nilai minimum spesifik per paket atau Nilai minimum spesifik per kategori aplikasi akan mendapatkan nilai minimum ini). Vendor harus menentukan nilai minimum komponen yang tidak nol saat menentukan konfigurasi penggunaan berlebih I/O disk.
- Nilai minimum khusus paket. Vendor dapat menentukan nilai minimum khusus untuk paket vendor tertentu. Pemetaan harus berisi nama paket lengkap. Nilai minimum yang ditentukan dalam konfigurasi ini lebih diutamakan daripada nilai minimum yang ditentukan dalam konfigurasi lain untuk paket tertentu.
- Batas khusus kategori aplikasi. Vendor dapat menentukan nilai minimum khusus untuk kategori aplikasi tertentu. Kategori aplikasi harus berupa salah satu kategori yang didukung - aplikasi Peta dan Media. Nilai minimum yang ditentukan dalam konfigurasi ini dipetakan ke paket tertentu menggunakan Pemetaan kategori aplikasi.
- Batas di seluruh sistem. Vendor tidak boleh menentukan konfigurasi ini.
Konfigurasi awalan paket vendor, paket yang aman dihentikan, nilai minimum tingkat komponen, dan nilai minimum khusus paket hanya dapat diupdate oleh konfigurasi vendor untuk aplikasi dan layanan vendor. Konfigurasi nilai minimum khusus kategori aplikasi hanya dapat diupdate oleh konfigurasi vendor untuk semua aplikasi peta dan media.
Nilai minimum penggunaan berlebihan berisi jumlah byte yang diizinkan untuk ditulis selama:
- Mode latar depan aplikasi atau layanan versus mode latar belakang
- Mode garasi sistem
Klasifikasi ini memungkinkan aplikasi dan layanan latar depan yang menghadap pengguna untuk menulis lebih banyak data daripada aplikasi dan layanan latar belakang. Dalam mode Garasi, aplikasi dan layanan cenderung mendownload update, sehingga masing-masing memerlukan nilai minimum yang lebih tinggi daripada aplikasi dan layanan yang berjalan dalam mode lain.
Konfigurasi sistem dan pihak ketiga
OEM tidak boleh memperbarui konfigurasi sistem dan pihak ketiga.
- Konfigurasi sistem menentukan batas dan tindakan penggunaan I/O berlebihan untuk
aplikasi dan layanan sistem.
- Konfigurasi ini juga dapat memperbarui Pemetaan kategori aplikasi. Oleh karena itu, kolom konfigurasi ini digunakan bersama antara konfigurasi sistem dan vendor.
- Konfigurasi pihak ketiga menentukan batas untuk semua aplikasi pihak ketiga. Semua aplikasi yang tidak diinstal sebelumnya di sistem adalah aplikasi pihak ketiga.
- Semua aplikasi pihak ketiga menerima nilai minimum yang sama (misalnya, tidak ada aplikasi pihak ketiga yang menerima nilai minimum khusus) kecuali aplikasi peta dan media, yang nilai minimumnya ditentukan oleh konfigurasi vendor.
- Batas penggunaan berlebihan I/O disk di bawah ini adalah batas default untuk
aplikasi pihak ketiga. Nilai minimum ini disertakan dengan image sistem.
- Penulisan 3 GiB dalam mode latar depan aplikasi.
- Penulisan 2 GiB dalam mode latar belakang aplikasi.
- Penulisan 4 GiB dalam mode garasi sistem.
- Ini adalah nilai minimum dasar. Nilai minimum ini diperbarui seiring dengan makin banyaknya yang dipelajari tentang penggunaan I/O disk.
Format XML konfigurasi penggunaan berlebihan
Konfigurasi vendor default dapat ditempatkan (ini opsional) di lokasi
/vendor/etc/automotive/watchdog/resource_overuse_configuration.xml
dalam image build. Jika konfigurasi ini tidak ditentukan, konfigurasi yang ditentukan sistem juga diterapkan untuk aplikasi dan layanan vendor.
File XML hanya boleh berisi satu tag untuk setiap kolom konfigurasi. Konfigurasi penggunaan I/O berlebihan harus ditentukan dalam file XML. Semua nilai batas harus ditentukan dalam unit MiB.
Contoh konfigurasi XML diberikan di bawah ini:
<resourceOveruseConfiguration version="1.0"> <componentType>VENDOR</componentType> <!-- List of safe to kill vendor packages. --> <safeToKillPackages> <package>com.vendor.package.A</package> <package>com.vendor.package.B</package> </safeToKillPackages> <!-- List of vendor package prefixes. --> <vendorPackagePrefixes> <packagePrefix>com.vendor.package</packagePrefix> </vendorPackagePrefixes> <!-- List of unique package names to app category mappings. --> <packagesToAppCategoryTypes> <packageAppCategory type="MEDIA">com.vendor.package.A</packageAppCategory> <packageAppCategory type="MAPS">com.google.package.B</packageAppCategory> <packageAppCategory type="MEDIA">com.third.party.package.C</packageAppCategory> </packagesToAppCategoryTypes> <ioOveruseConfiguration> <!-- Thresholds in MiB for all vendor packages that don't have package specific thresholds. --> <componentLevelThresholds> <state id="foreground_mode">1024</state> <state id="background_mode">512</state> <state id="garage_mode">3072</state> </componentLevelThresholds> <packageSpecificThresholds> <!-- IDs must be unique --> <perStateThreshold id="com.vendor.package.C"> <state id="foreground_mode">400</state> <state id="background_mode">100</state> <state id="garage_mode">200</state> </perStateThreshold> <perStateThreshold id="com.vendor.package.D"> <state id="foreground_mode">1024</state> <state id="background_mode">500</state> <state id="garage_mode">2048</state> </perStateThreshold> </packageSpecificThresholds> <!-- Application category specific thresholds. --> <appCategorySpecificThresholds> <!-- One entry per supported application category --> <perStateThreshold id="MEDIA"> <state id="foreground_mode">600</state> <state id="background_mode">700</state> <state id="garage_mode">1024</state> </perStateThreshold> <perStateThreshold id="MAPS"> <state id="foreground_mode">800</state> <state id="background_mode">900</state> <state id="garage_mode">2048</state> </perStateThreshold> </appCategorySpecificThresholds> </ioOveruseConfiguration> </resourceOveruseConfiguration>
Memperbarui konfigurasi penggunaan berlebih melalui API sistem CarWatchdogManager
Konfigurasi XML di atas hanya dapat disediakan di image build. Jika OEM memilih untuk mengupdate konfigurasi di perangkat setelah build dirilis, mereka dapat menggunakan API berikut untuk melakukan perubahan pada konfigurasi di perangkat.
- Berikan izin
Car.PERMISSION_CONTROL_CAR_WATCHDOG_CONFIG
kepada pemanggil. - Harus menggunakan konfigurasi yang ada untuk memperbarui dan menetapkan
konfigurasi baru. Gunakan API
CarWatchdogManager.getResourceOveruseConfigurations
untuk mendapatkan konfigurasi yang ada. Jika konfigurasi yang ada tidak digunakan, semua konfigurasi (termasuk konfigurasi sistem dan pihak ketiga) akan ditimpa, yang tidak direkomendasikan. - Perbarui konfigurasi yang ada dengan perubahan delta dan tetapkan konfigurasi baru. Jangan perbarui konfigurasi sistem dan komponen pihak ketiga.
- Gunakan API
CarWatchdogManager.setResourceOveruseConfigurations
untuk menyetel konfigurasi baru. - Untuk mendapatkan dan menyetel konfigurasi penggunaan berlebih I/O disk, gunakan flag
CarWatchdogManager.FLAG_RESOURCE_OVERUSE_IO
.
Berikut adalah contoh penerapan yang memperbarui konfigurasi penggunaan berlebih resource:
void updateResourceOveruseConfigurations() { CarWatchdogManager manager = (CarWatchdogManager) car.getCarManager(Car.CAR_WATCHDOG_SERVICE); List<ResourceOveruseConfiguration> resourceOveruseConfigurations = manager.getResourceOveruseConfigurations( CarWatchdogManager.FLAG_RESOURCE_OVERUSE_IO); List<ResourceOveruseConfiguration> newResourceOveruseConfigurations = new List<>(); ResourceOveruseConfiguration vendorConfiguration; for(ResourceOveruseConfiguration config : resourceOveruseConfigurations) { // Do not update the configurations of the system and third-party component types. if (config.getComponentType() != ResourceOveruseConfiguration.COMPONENT_TYPE_VENDOR) { newResourceOveruseConfigurations.add(config); continue; } vendorConfiguration = config; } if (vendorConfiguration == null) { ResourceOveruseConfiguration.Builder vendorConfigBuilder = new ResourceOveruseConfiguration.Builder(); initializeConfig(vendorConfigBuilder); newResourceOveruseConfigurations.add(vendorConfigBuilder.build()); } else { ResourceOveruseConfiguration newVendorConfig = updateConfig(vendorConfiguration); newResourceOveruseConfigurations.add(newVendorConfig); } int result = manager.setResourceOveruseConfigurations( newResourceOveruseConfigurations, if (result != CarWatchdogManager.RETURN_CODE_SUCCESS) { // Failed to set the resource overuse configurations. } } /** Sets the delta between the old configuration and the new configuration. */ ResourceOveruseConfiguration updateConfig( ResourceOveruseConfiguration oldConfiguration) { // Replace com.vendor.package.A with com.vendor.package.B in the safe-to-kill list. List<String> safeToKillPackages = oldConfiguration.getSafeToKillPackages(); safeToKillPackages.remove("com.vendor.package.A"); safeToKillPackages.add("com.vendor.package.B"); ResourceOveruseConfiguration.Builder configBuilder = new ResourceOveruseConfiguration.Builder( oldConfiguration.getComponentType(), safeToKillPackages, oldConfiguration.getVendorPackagePrefixes(), oldConfiguration.getPackagesToAppCategoryTypes()); configBuilder.addVendorPackagePrefixes("com.vendor."); configBuilder.addPackagesToAppCategoryTypes("com.vendor.package.B", ResourceOveruseConfiguration.APPLICATION_CATEGORY_TYPE_MAPS); IoOveruseConfiguration oldIoConfiguration = oldConfiguration.getIoOveruseConfiguration(); IoOveruseConfiguration.Builder ioConfigBuilder = new IoOveruseConfiguration.Builder( oldIoConfiguration.getComponentLevelThresholds(), oldIoConfiguration.getPackageSpecificThresholds(), oldIoConfiguration.getAppCategorySpecificThresholds(), oldIoConfiguration.getSystemWideThresholds()); // Define the amount of bytes based on the flash memory specification, expected lifetime, // and estimated average amount of bytes written by a package during different modes. ioConfigBuilder.addPackageSpecificThresholds("com.vendor.package.B", new PerStateBytes(/* foregroundModeBytes= */ 2 * 1024 * 1024 * 1024, /* backgroundModeBytes= */ 500 * 1024 * 1024, /* garageModeBytes= */ 3 * 1024 * 1024 * 1024)); return configBuilder.setIoOveruseConfiguration(ioConfigBuilder.build()).build(); }
Aplikasi yang memantau penggunaan resource yang berlebihan
Aplikasi pihak ketiga dan vendor dapat memantau notifikasi penggunaan berlebihan resource khusus aplikasi dari Watchdog atau melakukan polling CarWatchdogManager
untuk statistik penggunaan berlebihan resource khusus aplikasi hingga 30 hari terakhir.
Mendengarkan notifikasi penggunaan resource berlebih
Aplikasi dapat menerapkan pemroses penggunaan berlebih resource dan mendaftarkan pemroses dengan CarWatchdogManager
untuk menerima notifikasi khusus aplikasi saat aplikasi melebihi 80% atau 100% dari batas penggunaan berlebih I/O disk. Aplikasi dapat menggunakan
notifikasi ini untuk:
- Mencatat statistik penggunaan I/O disk yang berlebihan untuk analisis offline. Developer dapat menggunakan logging ini untuk men-debug masalah penggunaan I/O disk yang berlebihan.
- Kurangi penulisan I/O disk hingga penghitung penggunaan berlebih direset.
Klien Java
- Terapkan pemroses dengan mewarisi
CarWatchdogManager.ResourceOveruseListener
:class ResourceOveruseListenerImpl implements CarWatchdogManager.ResourceOveruseListener { @Override public void onOveruse( @NonNull ResourceOveruseStats resourceOveruseStats) { // 1. Log/Upload resource overuse metrics. // 2. Reduce writes until the counters reset. IoOveruseStats ioOveruseStats = resourceOveruseStats.getIoOveruseStats(); // Stats period - [ioOveruseStats.getStartTime(), ioOveruseStats.getStartTime() // + ioOveruseStats.getDurationInSeconds()] // Total I/O overuses - ioOveruseStats.getTotalOveruses() // Total bytes written - ioOveruseStats.getTotalBytesWritten() // Remaining write bytes for the current UTC calendar day - // ioOveruseStats.getRemainingWriteBytes() } } }
- Daftarkan instance pemroses dengan memanggil
CarWatchdogManager.addResourceOveruseListener
private void addResourceOveruseListener() { CarWatchdogManager manager = (CarWatchdogManager) car.getCarManager(Car.CAR_WATCHDOG_SERVICE); // Choose a proper executor to handle resource overuse notifications. Executor executor = mContext.getMainExecutor(); manager.addResourceOveruseListener( executor, CarWatchdogManager.FLAG_RESOURCE_OVERUSE_IO, mListenerImpl); }
- Membatalkan pendaftaran instance pemroses saat aplikasi selesai mendengarkan:
private void removeResourceOveruseListener() { CarWatchdogManager manager = (CarWatchdogManager) car.getCarManager(Car.CAR_WATCHDOG_SERVICE); mCarWatchdogManager.removeResourceOveruseListener( mListenerImpl); }
Klien native
- Sertakan
carwatchdog_aidl_interface-ndk_platform
dalam dependensishared_libs
aturan build.Android.bp
cc_binary { name: "sample_native_client", srcs: [ "src/*.cpp" ], shared_libs: [ "carwatchdog_aidl_interface-ndk_platform", "libbinder_ndk", ], vendor: true, }
- Tambahkan kebijakan SELinux untuk mengizinkan domain layanan vendor menggunakan binder
(makro
binder_user
) dan tambahkan domain layanan vendor kecarwatchdog
domain klien(carwatchdog_client_domain macro)
. Lihat kode di bawah untuksample_client.te
danfile_contexts
.sample_client.te
type sample_client, domain; type sample_client_exec, exec_type, file_type, vendor_file_type; carwatchdog_client_domain(sample_client) init_daemon_domain(sample_client) binder_use(sample_client)
file_contexts
/vendor/bin/sample_native_client u:object_r:sample_client_exec:s0
- Terapkan pemroses penggunaan berlebih resource dengan mewarisi
BnResourceOveruseListener
. PenggantianBnResourceOveruseListener::onOveruse
untuk menangani notifikasi penggunaan resource yang berlebihan.ResourceOveruseListenerImpl.h
class ResourceOveruseListenerImpl : public BnResourceOveruseListener { public: ndk::ScopedAStatus onOveruse( ResourceOveruseStats resourceOveruseStats) override; private: void initialize(); void terminate(); std::shared_ptr<ICarWatchdog> mWatchdogServer; std::shared_ptr<IResourceOveruseListener> mListener; }
ResourceOveruseListenerImpl.cpp
ndk::ScopedAStatus ResourceOveruseListenerImpl::onOveruse( ResourceOveruseStats resourceOveruseStats) { // 1. Log/Upload resource overuse metrics. // 2. Reduce writes until the counters reset. if (stats.getTag() != ResourceOveruseStats::ioOveruseStats) { // Received resourceOveruseStats doesn't contain I/O overuse stats. } const IoOveruseStats& ioOveruseStats = stats.get(); // Stats period - [ioOveruseStats.startTime, // ioOveruseStats.startTime + ioOveruseStats.durationInSeconds] // Total I/O overuses - ioOveruseStats.totalOveruses // Total bytes written - ioOveruseStats.writtenBytes // Remaining write bytes for the current UTC calendar day - // ioOveruseStats.remainingWriteBytes return ndk::ScopedAStatus::ok(); }
- Mulai kumpulan thread binder dan daftarkan pemroses penggunaan berlebih resource
dengan server watchdog. Server Watchdog terdaftar dengan nama layanan
android.automotive.watchdog.ICarWatchdog/default
.main.cpp
int main(int argc, char** argv) { ABinderProcess_setThreadPoolMaxThreadCount(1); ABinderProcess_startThreadPool(); std::shared_ptr<ResourceOveruseListenerImpl> listener = ndk::SharedRefBase::make<ResourceOveruseListenerImpl>(); // The listener is added in initialize(). listener->initialize(); ... Run service ... // The listener is removed in terminate(). listener->terminate(); }
ResourceOveruseListenerImpl.cpp
void ResourceOveruseListener::initialize() { ndk::SpAIBinder binder(AServiceManager_getService( "android.automotive.watchdog.ICarWatchdog/default")); std::shared_ptr<ICarWatchdog> server = ICarWatchdog::fromBinder(binder); mWatchdogServer = server; std::shared_ptr<IResourceOveruseListener> listener = IResourceOveruseListener::fromBinder(this->asBinder()); mWatchdogServer->addResourceOveruseListener( std::vector<int>{ResourceType.IO}, listener); mListener = listener; } void ResourceOveruseListener::terminate() { mWatchdogServer->removeResourceOveruseListener(mListener); }
Meminta statistik penggunaan resource berlebih
Aplikasi dapat melakukan polling CarWatchdogManager untuk statistik ATS penggunaan I/O berlebih khusus aplikasi selama 30 hari terakhir.
Klien Java
Gunakan CarWatchdogManager.getResourceOveruseStats
untuk mendapatkan statistik penggunaan berlebih resource. Teruskan tanda CarWatchdogManager.FLAG_RESOURCE_OVERUSE_IO
untuk mendapatkan statistik penggunaan berlebih I/O disk.
private void getResourceOveruseStats() { CarWatchdogManager manager = (CarWatchdogManager) car.getCarManager(Car.CAR_WATCHDOG_SERVICE); // Returns resource overuse stats with I/O overuse stats for the past // 7 days. Stats are available for up to the past 30 days. ResourceOveruseStats resourceOveruseStats = mCarWatchdogManager.getResourceOveruseStats( CarWatchdogManager.FLAG_RESOURCE_OVERUSE_IO, CarWatchdogManager.STATS_PERIOD_PAST_7_DAYS); IoOveruseStats ioOveruseStats = resourceOveruseStats.getIoOveruseStats(); // Stats period - [ioOveruseStats.getStartTime(), ioOveruseStats.getStartTime() // + ioOveruseStats.getDurationInSeconds()] // Total I/O overuses - ioOveruseStats.getTotalOveruses() // Total bytes written - ioOveruseStats.getTotalBytesWritten() // Remaining write bytes for the UTC calendar day - // ioOveruseStats.getRemainingWriteBytes() }
Klien native
Gunakan CarWatchdogServer.getResourceOveruseStats
untuk mendapatkan statistik penggunaan berlebih resource. Teruskan enum ResourceType.IO
untuk mengambil statistik penggunaan berlebih I/O disk.
void getResourceOveruseStats() { ndk::SpAIBinder binder(AServiceManager_getService( "android.automotive.watchdog.ICarWatchdog/default")); std::shared_ptr<ICarWatchdog> server = ICarWatchdog::fromBinder(binder); // Returns the stats only for the current UTC calendar day. const std::vector<ResourceOveruseStats> resourceOveruseStats; ndk::ScopedAStatus status = server.getResourceOveruseStats( std::vector<int>{ResourceType.IO}, &resourceOveruseStats); if (!status.isOk()) { // Failed to get the resource overuse stats. return; } for (const auto& stats : resourceOveruseStats) { if (stats.getTag() != ResourceOveruseStats::ioOveruseStats) { continue; } const IoOveruseStats& ioOveruseStats = stats.get(); // Stats period - [ioOveruseStats.startTime, // ioOveruseStats.startTime + ioOveruseStats.durationInSeconds] // Total I/O overuses - ioOveruseStats.totalOveruses // Total bytes written - ioOveruseStats.writtenBytes // Remaining write bytes for the current UTC calendar day - // ioOveruseStats.remainingWriteBytes } }
Pengalaman pengguna akibat penggunaan resource yang berlebihan
Bagian berikut menjelaskan pengalaman pengguna saat penggunaan resource berlebihan terjadi.
Setelan prioritaskan performa aplikasi
Halaman aplikasi Setelan berisi setelan untukPrioritize app performance
(lihat gambar di bawah), yang memungkinkan pengguna memprioritaskan performa aplikasi daripada sistem dan
performa hardware jangka panjang. Setelan ini hanya tersedia untuk aplikasi yang aman dihentikan jika penggunaan sumber daya berlebihan. Jika tidak, setelan ini akan dinonaktifkan. Jika setelan ini
dinonaktifkan (setelan default) untuk aplikasi, aplikasi dapat dihentikan karena penggunaan resource yang berlebihan.
Jika tidak, aplikasi tidak akan dihentikan karena penggunaan resource yang berlebihan.
Saat pengguna mengaktifkan setelan ini, dialog konfirmasi berikut menjelaskan implikasi pengaktifan setelan tersebut:
Setelah 90 hari, setelan ini akan otomatis direset ke default. Batas hari dapat diubah dengan aplikasi overlay RRO menggunakan watchdogUserPackageSettingsResetDays
, hingga maksimum 180 hari. Untuk mempelajari lebih lanjut, lihat
Mengubah nilai resource aplikasi saat runtime. Tag overlay contoh berikut dapat disertakan dalam AndroidManifest.xml
:
<overlay android:priority="<insert-value>" android:targetPackage="com.android.car.updatable" android:targetName="CarServiceCustomization" android:resourcesMap="@xml/overlays" />
Di res/values/config.xml
:
<resources> <integer name="watchdogUserPackageSettingsResetDays">value</integer> </resources>
Di res/xml/overlays.xml
:
<overlay> <item target="integer/watchdogUserPackageSettingsResetDays" value="@integer/watchdogUserPackageSettingsResetDays" /> </overlay>
Setelan aplikasi yang memengaruhi performa
Aplikasi Setelan berisi bagian Aplikasi yang memengaruhi performa (lihat Gambar 1). Saat diketuk, daftar aplikasi yang telah dibatasi karena penggunaan berlebihan memori flash dan berdampak negatif pada performa sistem akan ditampilkan. Hal ini mengikuti persyaratan CDD 3.5.1 [C-1-1].
Gambar 1. Aplikasi yang memengaruhi performa.
Aplikasi yang dihentikan karena penggunaan resource yang berlebihan tercantum di sini (lihat Gambar 2). Aplikasi yang tercantum dapat diprioritaskan. Untuk mempelajari lebih lanjut, lihat Setelan memprioritaskan performa aplikasi.
Gambar 2. Daftar aplikasi yang dihentikan karena penggunaan resource yang berlebihan.
Notifikasi pengguna
Jika aplikasi atau layanan berulang kali menggunakan I/O disk secara berlebihan (misalnya, menulis data ke disk di luar batas yang ditentukan) dalam jangka waktu tertentu dan aman untuk dihentikan karena penggunaan resource yang berlebihan, pengguna akan diberi tahu setelah kendaraan memasuki status izinkan pengemudi terganggu.
Notifikasi pengguna pertama (selama perjalanan) diposting sebagai notifikasi pendahuluan dan notifikasi lainnya diposting di pusat notifikasi.
Misalnya, saat aplikasi berulang kali menggunakan I/O disk secara berlebihan, pengguna akan menerima notifikasi berikut:
- Saat pengguna mengklik tombol Prioritaskan aplikasi, halaman setelan aplikasi akan diluncurkan, tempat pengguna dapat mengaktifkan atau menonaktifkan setelan Prioritaskan performa aplikasi.
- Saat pengguna mengklik tombol Nonaktifkan aplikasi, aplikasi akan dinonaktifkan hingga pengguna meluncurkan aplikasi atau mengaktifkannya di halaman setelan aplikasi.
- Untuk aplikasi yang tidak dapat di-uninstal, tombol Nonaktifkan aplikasi diganti dengan tombol Uninstal aplikasi. Saat pengguna mengklik tombol
Uninstal aplikasi, halaman Setelan aplikasi akan diluncurkan,
tempat pengguna dapat meng-uninstal aplikasi.
Rekomendasi untuk penerapan peluncur
Jika aplikasi dinonaktifkan karena penggunaan resource yang berlebihan, aplikasi akan hilang dari
aplikasi peluncur default karena CarService memperbarui status aktif aplikasi sebagai
PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED
.
OEM harus memperbarui implementasi peluncur bawaan untuk menampilkan aplikasi ini seperti biasa,
sehingga pengguna dapat menggunakannya jika diperlukan. Lihat rekomendasi berikut berdasarkan rilis build.
Rilis Android SC V2
- Implementasi peluncur harus menggunakan
flag
MATCH_DISABLED_UNTIL_USED_COMPONENTS
saat mengambil daftar paket untuk ditampilkan di peluncur. - Saat pengguna mengklik aplikasi yang berada dalam status
PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED
, aplikasi peluncur harus mengaktifkan aplikasi dengan menetapkan status aktif sebagai: