Um zu verhindern, dass sich der Akku entlädt, wird ein Android-Gerät, das inaktiv bleibt, schnell heruntergefallen schläft. Manchmal muss jedoch der Bildschirm einer App aktiviert werden. oder die CPU und lassen sie aktiv, um einige Aufgaben zu erledigen.
Der Ansatz hängt von den Anforderungen Ihrer App ab. Eine allgemeine Regel sollten Sie für Ihre Analyse möglichst wenig Aufwand App, um die Auswirkungen der App auf die Systemressourcen zu minimieren. Die folgenden Abschnitte beschreiben, wie mit den Fällen umgegangen werden soll, in denen das Standard-Ruheverhalten des Geräts nicht mit den Anforderungen Ihrer App kompatibel ist.
Alternativen zur Verwendung von Wakelocks
Bevor Sie Ihrer App Wakelock-Unterstützung hinzufügen, überlegen Sie, ob die Verwendung eine der folgenden alternativen Lösungen unterstützt:
Wenn Ihre App lange HTTP-Downloads ausführt, sollten Sie
DownloadManager
Wenn Ihre Anwendung Daten von einem externen Server synchronisiert, sollten Sie ein Synchronisierungsadapter.
Wenn deine App Hintergrunddienste verwendet, solltest du die Verwendung JobScheduler oder Firebase Cloud Messaging um diese Dienste in bestimmten Intervallen auszulösen.
Wenn du deine Companion-App weiterhin ausführen musst, wenn ein Begleitgerät sich in Reichweite befinden, verwenden Sie den Companion-Gerätemanager.
Display eingeschaltet lassen
Bei bestimmten Apps muss das Display eingeschaltet bleiben, z. B. bei Spiele- oder Film-Apps. Die
verwenden Sie dazu am besten
FLAG_KEEP_SCREEN_ON
in Ihren Aktivitäten (und nur in einer Aktivität, niemals in einem Dienst oder einer anderen App)
Komponente). Beispiel:
Kotlin
class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) } }
Java
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } }
Der Vorteil dieses Ansatzes besteht darin, dass im Gegensatz zu Wakelocks, die im Abschnitt Die CPU ein) erfordert keine spezielle Berechtigung und die Plattform den Nutzer beim Wechsel zwischen Apps korrekt verwaltet, ohne dass ungenutzte Ressourcen freizugeben.
Eine weitere Möglichkeit zur Implementierung ist die Layout-XML-Datei Ihrer Anwendung. Verwenden Sie hierzu
Das Attribut android:keepScreenOn
:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:keepScreenOn="true"> ... </RelativeLayout>
Die Verwendung von android:keepScreenOn="true"
entspricht der Verwendung von
FLAG_KEEP_SCREEN_ON
Sie können die Methode wählen, die für Ihre App am besten geeignet ist. Der Vorteil der Einstellung
in Ihren Aktivitäten darauf hinweisen, dass Sie so die Möglichkeit haben,
die Kennzeichnung später programmgesteuert gelöscht werden,
damit sich der Bildschirm
deaktiviert.
Inaktivmodus für Fernseher
Im Fernsehen
FLAG_KEEP_SCREEN_ON
um zu verhindern, dass das Gerät in
Inaktivmodus
während der aktiven Videowiedergabe. Wenn FLAG_KEEP_SCREEN_ON
nicht festgelegt ist
durch die Vordergrundaktivität aktiviert wird, wechselt das Gerät automatisch in den Inaktivmodus
nach einem Zeitraum der Inaktivität.
Lassen Sie die CPU eingeschaltet
Wenn die CPU weiter ausgeführt werden muss, um vor dem
in den Ruhemodus wechselt, können Sie eine
Systemfunktion von PowerManager
sogenannten Wakelocks. Mit Wakelocks kann Ihre Anwendung den Energiestatus steuern
des Hostgeräts.
Das Erstellen und Halten von Wakelocks kann erhebliche Auswirkungen auf die
Akkulaufzeit. Verwenden Sie Wakelocks daher nur, wenn es unbedingt erforderlich ist und
so kurz wie möglich halten. Sie sollten beispielsweise nie
Wakelocks in einer Aktivität verwenden. Wie oben beschrieben, können Sie
in Ihren Aktivitäten aktivieren möchten, verwenden Sie
FLAG_KEEP_SCREEN_ON
Ein legitimer Fall für die Verwendung eines Wakelocks ist ein Hintergrunddienst, benötigt einen Wakelock, damit die CPU weiterläuft, während der Bildschirm eingeschaltet ist deaktiviert. Diese Vorgehensweise sollte jedoch aufgrund ihrer Auswirkungen Akkulaufzeit.
Um einen Wakelock zu verwenden, musst du zuerst die
WAKE_LOCK
-Berechtigung für
in die Manifestdatei Ihrer App ein:
<uses-permission android:name="android.permission.WAKE_LOCK" />
Wenn Ihre App einen Übertragungsempfänger enthält, der einen Dienst für bestimmte Aufgaben verwendet, So richten Sie einen Wakelock direkt ein:
Kotlin
val wakeLock: PowerManager.WakeLock = (getSystemService(Context.POWER_SERVICE) as PowerManager).run { newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyApp::MyWakelockTag").apply { acquire() } }
Java
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyApp::MyWakelockTag"); wakeLock.acquire();
Rufe zum Aufheben des Wakelocks
wakelock.release()
Dadurch wird Ihr Anspruch auf die CPU zurückgezogen. Es ist wichtig, einen Wakelock freizugeben,
sobald deine App sie nicht mehr verwendet. So wird der Akku nicht entladen.