Gerät aktiv halten

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.