Watchdog memantau penggunaan memori flash dengan melacak jumlah total operasi tulis I/O disk yang dilakukan oleh semua aplikasi dan layanan menggunakan statistik I/O disk per UID yang ditampilkan oleh Kernel di lokasi `/proc/uid_io/stats`. Jika aplikasi atau layanan melebihi nilai minimum penggunaan I/O disk, Watchdog akan mengambil tindakan pada aplikasi atau layanan tersebut. Batas penggunaan berlebihan I/O disk dan tindakan untuk mengambil penggunaan berlebihan telah ditentukan dalam konfigurasi penggunaan berlebihan I/O disk.
Batas penggunaan berlebihan
- Batas penggunaan berlebihan I/O disk diterapkan setiap hari, yaitu, semua operasi tulis yang dilakukan oleh aplikasi/layanan digabungkan sejak awal hari kalender UTC saat ini dan diperiksa terhadap batas yang ditentukan dalam konfigurasi penggunaan berlebihan.
- Saat kendaraan dinyalakan beberapa kali pada hari tertentu, modul Watchdog akan 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 berlebihan dapat menentukan daftar aplikasi dan layanan vendor yang aman untuk dihentikan.
- Semua aplikasi pihak ketiga dapat dihentikan dengan aman.
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, dan dikirimkan dengan build. Vendor dapat menyertakan konfigurasi vendor secara opsional 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 mengupdate konfigurasi vendor
kapan saja.
Definisi konfigurasi yang berlebihan
Konfigurasi penggunaan berlebihan dibagi menurut 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 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 telah 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 paket yang aman untuk dihentikan.
- Pemetaan kategori aplikasi. Vendor dapat memetakan paket apa pun (termasuk paket pihak ketiga) ke salah satu dari dua kategori aplikasi yang didukung, yaitu aplikasi Peta dan Media. Pemetaan ini dilakukan untuk memberikan aplikasi peta dan media nilai minimum penggunaan I/O disk yang lebih tinggi 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 dalam Nilai minimum khusus paket atau Nilai minimum khusus kategori aplikasi akan mendapatkan nilai minimum ini). Vendor harus menentukan nilai minimum tingkat komponen yang bukan nol saat menentukan konfigurasi penggunaan berlebihan I/O disk.
- Batas khusus paket. Vendor dapat menentukan nilai minimum khusus untuk paket vendor tertentu. Pemetaan harus berisi nama paket lengkap. Batas yang ditentukan dalam konfigurasi ini lebih diutamakan daripada batas 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. Batas yang ditentukan dalam konfigurasi ini dipetakan ke paket tertentu menggunakan Pemetaan kategori aplikasi.
- Batas di seluruh sistem. Vendor tidak boleh menentukan konfigurasi ini.
Awalan paket vendor, Paket yang aman untuk dihentikan, Batas tingkat komponen, dan konfigurasi Batas khusus paket hanya dapat diperbarui oleh konfigurasi vendor untuk aplikasi dan layanan vendor. Konfigurasi Batas khusus kategori aplikasi hanya dapat diperbarui oleh konfigurasi vendor untuk semua aplikasi peta dan media.
Batas penggunaan berlebih 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 ditampilkan kepada pengguna menulis lebih banyak data daripada aplikasi dan layanan latar belakang. Dalam mode Garasi, aplikasi dan layanan cenderung mendownload update, sehingga setiap aplikasi dan layanan memerlukan nilai minimum yang lebih tinggi daripada aplikasi dan layanan yang berjalan dalam mode lain.
Konfigurasi sistem dan pihak ketiga
OEM tidak boleh mengupdate konfigurasi sistem dan pihak ketiga.
- Konfigurasi sistem menentukan tindakan dan batas penggunaan I/O yang berlebihan untuk
aplikasi dan layanan sistem.
- Konfigurasi ini juga dapat memperbarui Pemetaan kategori aplikasi. Dengan demikian, kolom konfigurasi ini digunakan bersama oleh konfigurasi sistem dan vendor.
- Konfigurasi pihak ketiga menentukan nilai minimum 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. Batas ini dikirimkan dengan image sistem.
- Operasi tulis 3 GiB dalam mode latar depan aplikasi.
- Operasi tulis 2 GiB dalam mode latar belakang aplikasi.
- Tulis 4 GiB dalam mode garasi sistem.
- Ini adalah nilai minimum dasar. Batas ini diperbarui seiring dengan informasi lebih lanjut tentang penggunaan I/O disk.
Format XML konfigurasi yang digunakan secara berlebihan
Konfigurasi vendor default dapat ditempatkan (ini opsional) di lokasi
/vendor/etc/automotive/watchdog/resource_overuse_configuration.xml
pada image build. Jika konfigurasi ini tidak ditentukan, konfigurasi yang ditentukan sistem
juga akan diterapkan untuk aplikasi dan layanan vendor.
File XML hanya boleh berisi satu tag untuk setiap kolom konfigurasi. Konfigurasi penggunaan I/O yang berlebihan harus ditentukan dalam file XML. Semua nilai nilai minimum 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 berlebihan melalui API sistem CarWatchdogManager
Konfigurasi XML di atas hanya dapat diberikan di image build. Jika OEM memilih untuk mengupdate konfigurasi di perangkat setelah build dirilis, OEM 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 mengupdate 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 menetapkan konfigurasi baru. - Untuk mendapatkan dan menetapkan konfigurasi penggunaan berlebihan I/O disk, gunakan flag
CarWatchdogManager.FLAG_RESOURCE_OVERUSE_IO
.
Berikut adalah contoh implementasi yang memperbarui konfigurasi penggunaan resource yang berlebihan:
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 vendor dan pihak ketiga dapat memproses notifikasi penggunaan resource
tertentu aplikasi dari Watchdog atau melakukan polling CarWatchdogManager
untuk statistik penggunaan resource
tertentu aplikasi hingga 30 hari terakhir.
Memproses notifikasi penggunaan resource yang berlebihan
Aplikasi dapat menerapkan pemroses penggunaan berlebihan resource dan mendaftarkan pemroses tersebut dengan CarWatchdogManager
untuk menerima notifikasi khusus aplikasi saat melebihi 80% atau 100% batas penggunaan berlebihan I/O disk. Aplikasi dapat menggunakan
notifikasi ini untuk:
- Catat statistik penggunaan I/O disk yang berlebihan untuk analisis offline. Developer aplikasi dapat menggunakan logging ini untuk men-debug masalah penggunaan I/O disk yang berlebihan.
- Kurangi operasi tulis I/O disk hingga penghitung penggunaan berlebihan direset.
Klien Java
- Implementasikan 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); }
- Batalkan pendaftaran instance pemroses saat aplikasi selesai memproses:
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 ke domain kliencarwatchdog
(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 berlebihan resource dengan mewarisi
BnResourceOveruseListener
. GantiBnResourceOveruseListener::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 yang menggunakan berlebihan resource
ke 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); }
Mengambil sampel statistik penggunaan berlebihan resource
Aplikasi dapat melakukan polling CarWatchdogManager untuk statistik ATS penyalahgunaan I/O khusus aplikasi selama 30 hari terakhir.
Klien Java
Gunakan CarWatchdogManager.getResourceOveruseStats
untuk mendapatkan
statistik penggunaan resource yang berlebihan. Teruskan flag CarWatchdogManager.FLAG_RESOURCE_OVERUSE_IO
untuk mendapatkan statistik penggunaan I/O disk yang berlebihan.
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 resource yang berlebihan. Teruskan enum ResourceType.IO
untuk mengambil statistik
penggunaan I/O disk yang berlebihan.
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 terkait penggunaan resource yang berlebihan
Bagian berikut menjelaskan pengalaman pengguna saat terjadi penggunaan resource yang berlebihan.
Prioritaskan setelan performa aplikasi
Halaman Setelan aplikasi 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 untuk
dihentikan saat terjadi penggunaan resource yang 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 akan menjelaskan implikasi terkait mengaktifkan setelan:
Setelah 90 hari, setelan ini akan otomatis direset ke setelan 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. Contoh tag overlay 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 memori flash yang berlebihan dan berdampak negatif pada performa sistem akan ditampilkan. Hal ini sesuai dengan 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 Memprioritaskan setelan 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 nilai minimum yang ditentukan) dalam jangka waktu tertentu dan aman untuk dihentikan saat penggunaan resource berlebihan, pengguna akan diberi tahu setelah kendaraan memasuki status izinkan gangguan pengemudi.
Notifikasi pengguna pertama (selama perjalanan) diposting sebagai notifikasi pra-peringatan dan notifikasi lainnya diposting di pusat notifikasi.
Misalnya, jika 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 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 mengupdate status aktif aplikasi sebagai
PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED
.
OEM harus mengupdate implementasi peluncur bawaan untuk menampilkan aplikasi ini sebagai tidak 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 yang akan 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 yang diaktifkan sebagai: