Watchdog überwacht die Nutzung des Flash-Speichers, indem er die Gesamtmenge der Laufwerks-E/A-Vorgänge verfolgt Schreibvorgänge von allen Apps und Diensten unter Verwendung der Laufwerks-E/A-Statistiken pro UID vom Kernel unter "/proc/uid_io/stats" bereitgestellt. Wenn eine App oder Dienst den Grenzwert für Überlastung des Laufwerks überschreitet, führt Watchdog App oder Dienst. Grenzwerte für die Überlastung der Laufwerk-E/A und zu ergreifende Maßnahmen bei Überbelegung ist in der Konfiguration der Laufwerks-E/A-Übernutzung vordefiniert.
Grenzwerte für Übernutzung
- Die Grenzwerte für die Überlastung der E/A-Laufwerke werden täglich erzwungen, d. h. Von einer Anwendung oder einem Dienst ausgeführte Schreibvorgänge werden seit Beginn der auf den aktuellen UTC-Kalendertag geprüft und auf die in der die übermäßige Verwendung von Konfigurationen.
- Wird ein Fahrzeug an einem Tag mehrmals gestartet, zeigt das Watchdog-Modul speichert die E/A-Nutzungsstatistiken des Laufwerks im Flash-Speicher und aggregiert sie, Beginn des aktuellen koordinierten Kalendertags (UTC).
Überbeanspruchte Aktionen
Wenn eine App wiederholt die festgelegte Laufwerks-E/A-Überlastung überschreitet Schwellenwerten, führt Watchdog die in der Überbeanspruchungskonfiguration definierten Aktionen aus.
- Alle Apps und Dienste von Anbietern gelten als kritisch Gesamtsystemstabilität zu verhindern, sodass sie nicht bei Überlastung der Laufwerk-E/A beendet werden. Sie können jedoch Die Überbelegungskonfiguration kann eine Liste von Anbieter-Apps definieren, die sicher beendet werden können und Dienste.
- Alle Drittanbieter-Apps können wieder beendet werden.
Wenn eine App oder ein Dienst sicher beendet werden kann, deaktiviert Watchdog die App oder den Dienst mit der App.
Komponentenstatus
PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED
Überbeanspruchte Konfiguration
Die Konfiguration für die Überbeanspruchung enthält die Grenzwerte für die Überlastung des Laufwerks-E/A Aktionen. Standardkonfigurationen für die Überbelegung werden im System und vom Anbieter definiert und mit dem Build versendet. Anbieter können den entsprechenden Konfiguration im Anbieter-Image. Wenn die Anbieterkonfiguration wird die Systemkonfiguration für die Anbieter-Apps und und Dienste.
Watchdog stellt System-APIs über CarWatchdogManager
zur Verfügung, wodurch
Anbieter, Apps oder Dienste, aktualisieren die Anbieterkonfiguration
jederzeit.
Definition der übermäßigen Verwendung
Die übermäßige Nutzung ist nach Komponententyp aufgeteilt, z. B. System, Anbieter, und von Drittanbietern. OEMs müssen nur die Konfiguration der Anbieterkomponente aktualisieren.
Anbieterkonfiguration
In der Anbieterkonfiguration sind Schwellenwerte für die Überlastung des Laufwerks-E/A und alle Anbieter-Apps und -Dienste sowie alle Karten- und Medien-Apps. Die Konfiguration enthält die folgenden Konfigurationsfelder.
- Präfixe von Anbieterpaketen. Alle Pakete, die im werden als Anbieterpakete betrachtet. Zusätzlich zu diesen können Anbieter vorinstallierte Pakete als Anbieterpakete klassifizieren, indem sie Durch Hinzufügen der Paketpräfixe zur Konfiguration der Anbieterpaketpräfixe Diese Konfiguration akzeptiert keine regulären Ausdrücke.
- Sicheres Beenden von Paketen. Anbieter können festlegen, -Pakete können sicher beendet werden, indem Sie die vollständigen Paketnamen zum sichere Beendigungspakete.
- Zuordnungen von Anwendungskategorien: Anbieter können jedes Paket zuordnen (einschließlich Drittanbieterpaketen) zu einer der beiden unterstützten Apps Kategorien: Karten- und Medien-Apps Diese Zuordnung erfolgt, um Karten zur Verfügung zu stellen. und Medien-Apps haben zu viele E/A-Grenzwerte für Laufwerke. Apps laden tendenziell mehr Daten herunter und schreiben auf die Festplatte als andere Apps Typen.
- Grenzwerte auf Komponentenebene: Definiert allgemeine Schwellenwerte für alle Anbieterpakete (d. h. Pakete, die nicht unter Paketspezifische Grenzwerte oder App-Kategorie-spezifische Schwellenwerte diesen Schwellenwerten). Anbieter müssen auf Komponentenebene Schwellenwerte nicht null definieren, wenn das Definieren der Überlastungskonfiguration von Laufwerks-E/A.
- Paketspezifische Schwellenwerte: Zulieferunternehmen können spezielle für bestimmte Anbieterpakete. Die Zuordnungen sollten den Parameter vollständige Paketnamen. Die in dieser Konfiguration definierten Schwellenwerte haben Vorrang Über Schwellenwerten, die in anderen Konfigurationen für ein bestimmtes Paket definiert sind.
- Schwellenwerte für die Anwendungskategorie. Anbieter können angeben, spezielle Schwellenwerte für bestimmte App-Kategorien. Die App Kategorien müssen eine der unterstützten Kategorien sein - Karten und Medien. Apps. Die in dieser Konfiguration definierten Schwellenwerte sind bestimmten Pakete mithilfe von Anwendungskategoriezuordnungen erstellen.
- Systemweite Grenzwerte: Anbieter dürfen diese Konfiguration nicht angeben.
Präfixe von Anbieterpaketen, sicher zu beendende Pakete, Grenzwerte auf Komponentenebene und Paketspezifische Schwellenwerte Konfigurationen für Grenzwerte können nur durch die Anbieterkonfiguration für Apps und Dienste von Anbietern. App-Kategoriespezifisch kann die Konfiguration von Grenzwerten nur durch die Anbieterkonfiguration für alle Karten- und Medien-Apps.
Die Grenzwerte für die Überbeanspruchung beinhalten die Menge an Byte, die während folgender Ereignisse geschrieben werden dürfen:
- Vordergrundmodus und Hintergrundmodus einer App oder eines Dienstes
- Garagensystemmodus
Durch diese Klassifizierung können Nutzer, die Apps und Dienste im Vordergrund sehen, mehr Daten schreiben als Hintergrund-Apps und -Dienste. Im Garage-Modus Apps und Dienste laden in der Regel Updates herunter und benötigen daher jeweils einen höheren Schwellenwert als Apps und Dienste, die in anderen Modi ausgeführt werden.
System- und Drittanbieterkonfigurationen
OEMs sollten die System- und Drittanbieterkonfigurationen nicht aktualisieren.
- In der Systemkonfiguration sind Grenzwerte für die E/A-Überlastung und Maßnahmen für
System-Apps und -Dienste.
- Mit dieser Konfiguration kann auch die Anwendungskategorie Zuordnungen. Daher wird dieses Konfigurationsfeld von System und Anbieter gemeinsam verwendet Konfigurationen.
- In der Drittanbieterkonfiguration sind
Grenzwerte für alle Drittanbieter
Apps. Alle Apps, die nicht vorinstalliert sind, werden
Drittanbieter-Apps.
- Alle Drittanbieter-Apps erhalten dieselben Grenzwerte (z. B. keine Apps von Drittanbietern gelten spezielle Grenzwerte), außer Karten und Medien Apps, deren Schwellenwerte durch die Anbieterkonfiguration definiert werden.
- Die folgenden Grenzwerte für die Überlastung der Laufwerk-E/A-Vorgänge sind die Standardgrenzwerte für den
Drittanbieter-Apps. Diese Grenzwerte werden mit dem System-Image versendet.
- 3 GiB Schreiben im Vordergrundmodus der App.
- 2 GiB Schreiben im Hintergrundmodus der Anwendung ausführen.
- 4 GiB Schreiben im Garagenmodus des Systems.
- Dies sind Basisgrenzwerte. Diese Schwellenwerte werden aktualisiert, wenn mehr über Laufwerks-E/A festgestellt wird Nutzung.
Konfigurations-XML-Format übermäßig verwenden
Die Standardanbieterkonfiguration kann am Standort platziert werden (optional).
/vendor/etc/automotive/watchdog/resource_overuse_configuration.xml
im Build-Image befinden. Wenn diese Konfiguration nicht angegeben ist,
wird auch auf die Apps und Dienste
des Anbieters angewendet.
Die XML-Datei sollte nur ein Tag für jedes Konfigurationsfeld enthalten. E/A-Überbeanspruchung Konfiguration in der XML-Datei definiert sein. Alle Schwellenwerte sollten MiB-Einheit angegeben ist.
Im Folgenden finden Sie ein Beispiel für eine XML-Konfiguration:
<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>
Übernutzungskonfiguration über CarWatchdogManager-System-APIs aktualisieren
Die obige XML-Konfiguration kann nur im Build-Image bereitgestellt werden. Wenn ein Der OEM aktualisiert die On-Device-Konfiguration nach der Veröffentlichung eines Builds. mit den folgenden APIs Änderungen an der Konfiguration auf dem Gerät vornehmen.
- Erteile die Berechtigung
Car.PERMISSION_CONTROL_CAR_WATCHDOG_CONFIG
dem Anrufer. - Die vorhandenen Konfigurationen müssen zum Aktualisieren und Festlegen des
neue Konfigurationen erstellen. API verwenden
CarWatchdogManager.getResourceOveruseConfigurations
, um die vorhandenen Konfigurationen erstellen. Wenn keine vorhandenen Konfigurationen verwendet werden, (einschließlich System- und Drittanbieterkonfigurationen) überschrieben, was nicht empfohlen wird. - Vorhandene Konfigurationen mit den Deltaänderungen aktualisieren und neue Konfigurationen. Aktualisieren Sie nicht die System- und Drittanbieterkomponente. Konfigurationen.
- Die API
CarWatchdogManager.setResourceOveruseConfigurations
verwenden um die neuen Konfigurationen festzulegen. - Verwenden Sie das Flag, um Konfigurationen für die Überbeanspruchung des Laufwerks abzurufen und festzulegen
CarWatchdogManager.FLAG_RESOURCE_OVERUSE_IO
Hier ist ein Implementierungsbeispiel, das die Konfigurationen für die übermäßige Nutzung von Ressourcen aktualisiert:
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(); }
Apps, die übermäßige Nutzung ihrer Ressourcen überwachen
Anbieter- und Drittanbieter-Apps können appspezifische Ressourcen erfassen
zu viele Benachrichtigungen von Watchdog verwenden oder CarWatchdogManager
für die App abfragen
Statistiken zu Überlastung bestimmter Ressourcen
für die letzten 30 Tage angezeigt werden.
Auf Benachrichtigungen über übermäßige Ressourcennutzung warten
Apps können einen Ressourcenüberlastungs-Listener implementieren und den
Listener mit CarWatchdogManager
, um app-spezifische Benachrichtigungen zu erhalten,
80% oder 100% ihrer Laufwerk-E/A-Grenzwerte überschreiten. Apps können Folgendes verwenden:
diese Benachrichtigungen an:
- Protokollieren Sie die Statistiken zu Laufwerk-E/A-Überlastungen für die Offlineanalyse. App-Kampagnen Entwickler können diese Protokollierung nutzen, um das Problem mit der Laufwerk-E/A-Überlastung zu beheben.
- Reduzieren Sie die E/A-Schreibvorgänge auf dem Laufwerk, bis die Übernutzungszähler zurückgesetzt werden.
Java-Client
- Implementieren Sie einen Listener durch Übernahme von
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() } } }
- Registrieren Sie die Listener-Instanz durch den Aufruf von
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); }
- Heben Sie die Registrierung der Listener-Instanz auf, wenn die App Folgendes erfasst hat:
private void removeResourceOveruseListener() { CarWatchdogManager manager = (CarWatchdogManager) car.getCarManager(Car.CAR_WATCHDOG_SERVICE); mCarWatchdogManager.removeResourceOveruseListener( mListenerImpl); }
Nativer Client
carwatchdog_aidl_interface-ndk_platform
einschließen inshared_libs
-Abhängigkeit der Build-Regel.Android.bp
cc_binary { name: "sample_native_client", srcs: [ "src/*.cpp" ], shared_libs: [ "carwatchdog_aidl_interface-ndk_platform", "libbinder_ndk", ], vendor: true, }
- SELinux-Richtlinie hinzufügen, um der Domain des Anbieterdienstes die Verwendung von Binder zu ermöglichen
(
binder_user
-Makro) und fügen Sie die Anbieterdienst-Domain zumcarwatchdog
-Clientdomain(carwatchdog_client_domain macro)
. Unten findest du den Code fürsample_client.te
undfile_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
- Listener für Ressourcenüberlastung durch Übernehmen von
BnResourceOveruseListener
ÜberschreibenBnResourceOveruseListener::onOveruse
für den Umgang mit übermäßiger Ressourcennutzung Benachrichtigungen.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(); }
- Binder-Thread-Pool starten und Listener für Übernutzung der Ressource registrieren
mit dem Watchdog-Server. Watchdog-Server ist unter dem Dienstnamen registriert
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); }
Statistiken zu übermäßiger Nutzung von Ressourcen abfragen
Apps können CarWatchdogManager hinsichtlich der app-spezifischen E/A-Überbeanspruchung abfragen Statistik ATS der letzten 30 Tage.
Java-Client
Nutzen Sie CarWatchdogManager.getResourceOveruseStats
, um die
Statistik zur Überlastung von Ressourcen. Übergeben Sie die CarWatchdogManager.FLAG_RESOURCE_OVERUSE_IO
Flag, um die E/A-Überlastungsstatistiken des Laufwerks abzurufen.
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() }
Nativer Client
Nutzen Sie CarWatchdogServer.getResourceOveruseStats
, um die
Statistik zur Überlastung von Ressourcen. Übergeben Sie die Aufzählung ResourceType.IO
, um die Überbeanspruchung des Laufwerks-E/A abzurufen
Statistiken.
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 } }
Zu viele Ressourcen
In den folgenden Abschnitten wird die Nutzererfahrung bei übermäßiger Nutzung von Ressourcen beschrieben.
Einstellung „App-Leistung priorisieren“
Die Seite Einstellungen der App enthält Einstellungen fürPrioritize app performance
(siehe Abbildung unten), mit denen Nutzer die Leistung einer App gegenüber dem System priorisieren können.
und langfristigen Hardwareleistung. Diese Einstellung ist nur für Apps verfügbar, die sicher sind
bei Überbeanspruchung der Ressource beendet werden. Andernfalls ist diese Einstellung deaktiviert. Wenn diese Einstellung
deaktiviert (Standardeinstellung) für eine App deaktiviert ist, kann sie bei übermäßiger Ressourcennutzung beendet werden.
Andernfalls wird die App nicht bei übermäßiger Ressourcennutzung beendet.
Wenn der Nutzer diese Einstellung aktiviert, wird im folgenden Bestätigungsdialogfeld Auswirkungen auf die Einstellung:
Nach 90 Tagen wird diese Einstellung automatisch auf die Standardeinstellung zurückgesetzt. Das Tageslimit kann
mit einer RRO-Overlay-App unter Verwendung von watchdogUserPackageSettingsResetDays
geändert
maximal 180 Tage. Weitere Informationen finden Sie unter
Den Wert der Ressourcen einer App während der Laufzeit ändern Die
folgendes Beispiel-Overlay-Tag kann in AndroidManifest.xml
eingefügt werden:
<overlay android:priority="<insert-value>" android:targetPackage="com.android.car.updatable" android:targetName="CarServiceCustomization" android:resourcesMap="@xml/overlays" />
In res/values/config.xml
:
<resources> <integer name="watchdogUserPackageSettingsResetDays">value</integer> </resources>
In res/xml/overlays.xml
:
<overlay> <item target="integer/watchdogUserPackageSettingsResetDays" value="@integer/watchdogUserPackageSettingsResetDays" /> </overlay>
Einstellung für Apps, die sich auf die Leistung auswirken
Die Einstellungen enthält den Bereich Apps, die sich auf die Leistung auswirken. (siehe Abbildung 1). Beim Antippen eine Liste von Apps, die aufgrund des Flash-Speichers eingeschränkt wurden und die Systemleistung beeinträchtigen. Dies folgt CDD 3.5.1-Anforderung [C-1-1]
Abbildung 1: Apps, die sich auf die Leistung auswirken
Anwendungen, die aufgrund von Ressourcenüberlastung beendet wurden, sind hier aufgeführt (siehe Abbildung 2). Die aufgeführten Apps dürfen zu priorisieren. Weitere Informationen finden Sie unter Priorisiere die App-Leistung.
Abbildung 2: Liste der Anwendungen, die aufgrund einer übermäßigen Ressourcennutzung beendet wurden.
Nutzerbenachrichtigung
Wenn eine App oder ein Dienst wiederholt Laufwerks-E/A-Vorgänge (z. B. Schreibvorgänge Daten innerhalb eines bestimmten Zeitraums auf der Festplatte über die definierten Schwellenwerte hinaus bei übermäßiger Ressourcennutzung beendet wird, wird der Nutzer benachrichtigt, sobald das Fahrzeug den Status „allow-driver-distraction“.
Die erste Nutzerbenachrichtigung (während der Fahrt) wird als Vorwarnung gepostet. Benachrichtigung und die anderen Benachrichtigungen werden in der Benachrichtigung gepostet. in der Mitte.
Wenn eine App beispielsweise wiederholt Laufwerks-E/A übermäßig beansprucht, erhält der Nutzer den Fehlercode folgende Benachrichtigung:
- Wenn der Nutzer auf die Schaltfläche App priorisieren klickt, wird das Symbol App-Einstellungsseite gestartet, auf der Nutzende die Einstellung App-Leistung priorisieren:
- Wenn der Nutzer auf die Schaltfläche App deaktivieren klickt, wird die App ist deaktiviert, bis der Nutzer die App startet oder im auf der Seite „Einstellungen“.
- Bei deinstallierten Apps ist die Schaltfläche App deaktivieren durch die Schaltfläche App deinstallieren ersetzt. Wenn Nutzende auf die App deinstallieren, wird die Seite mit den Einstellungen der App geöffnet. über die der Nutzer die App deinstallieren kann.
Empfehlung für die Launcher-Implementierung
Wenn Apps aufgrund einer Überlastung von Ressourcen deaktiviert werden, sind sie nicht mehr auf der
Standard-Launcher-App, da CarService die aktiviert als
PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED
OEMs müssen die integrierte Launcher-Implementierung aktualisieren, um diese Apps als ungewöhnlich,
damit Nutzende sie bei Bedarf verwenden können. Beachten Sie die folgenden Empfehlungen, die auf dem Build-Release basieren.
Android SC V2 Release
- Für die Implementierung des Launchers sollte die Methode
MATCH_DISABLED_UNTIL_USED_COMPONENTS
Flag beim Abrufen der Liste der im Launcher anzuzeigenden Pakete. - Wenn der Nutzer auf eine App klickt,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED
, der Launcher Die Anwendung muss die Anwendung aktivieren, indem der Aktivierungsstatus wie folgt festgelegt wird: