目次
(1) AndroidManifest.xmlに権限を設定する
(2) PowerManagerクラスを通じてWakeLockクラスのインスタンスオブジェクトを取得する
1. フラグを設定する
この方法は公式に推奨されており、最も簡単で許可申請も必要ありません。
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
2. View クラスの属性メソッドを使用する
1. XML レイアウトで設定します。
メイン インターフェイスによって参照される XML ファイルで、最上位のレイアウトを見つけて、次の属性を追加します。
android:keepScreenOn="true"
2. 機能コードで設定します。
topLayout.setKeepScreenOn(true);
3.ウェイクロックロック機構
1 はじめに
Android アプリケーション開発では、タスクが完了するまでアプリケーションがバックグラウンド タスクを実行し続けることができるように、画面または CPU を起動したままにするために Wakelock が広く使用されています。Wakelock は、特定のアプリケーション シナリオを解決するために作成された概念であり、その機能は、特定のニーズを満たすために画面、CPU、またはその他のマシンのステータスを実行状態に維持することです。
WakeLock は Androidフレームワーク層によって提供される一連のメカニズムであり、アプリケーションはこのメカニズムを使用して Android デバイスのステータスを制御できます。ここでいうデバイスの状態とは、主に画面の開閉やCPUの保持などを指します。WakeLock はシステムを「起動した状態」に保つ手段であることを理解してください。
2.機能
場合によっては、アプリによっては、ユーザーが長時間操作しなかった場合でも、ユーザーがスリープ状態にならないようにすることがあります。たとえば、ビデオを見ているときは、携帯電話の画面はオンのままにしておく必要があります。携帯電話の画面が一定期間オフのままになると、システムはスリープ モードになり、ネットワーク ダウンロードの中断、バックグラウンドでの音楽再生の一時停止など、一部のバックグラウンド タスクが適切に実行されなくなる可能性があります。Android はこの目的のために WakeLock を設計しました。WakeLock このような問題を解決するために、アプリケーションが WakeLock を適用している限り、WakeLock を解除する前にシステムがスリープ状態にならず、画面がオフになってもアプリケーションが実行するタスクは実行されません。システムによって中断されました。
- アプリケーションがバックグラウンド タスクを実行し続けることができるように、CPU を起動したままにします。
- アプリケーションがユーザーに情報を継続的に表示できるように、画面を起動したままにします。
- 特定のタスクを正常に実行できるように、デバイスを起動したままにします。
Wakelock は通常、次のシナリオで使用されます。
- 音楽の再生: 音楽アプリケーションの再生中は、音楽を正常に再生できるように CPU を起動したままにし、ユーザーが現在再生中のトラックを表示できるように画面を起動したままにしておく必要があります。
- バックグラウンド タスク: アプリケーションがバックグラウンドで特定のタスクを実行する必要がある場合、タスクが正常に実行できるように CPU が起動していることを確認する必要があります。また、ユーザーが特定の情報を取得できるように画面を起動したままにしておく必要がある場合もあります。 ;
- 位置監視: アプリケーションがデバイスの位置情報を監視する必要がある場合、デバイスの位置情報を正しく取得できるように、CPU が起動していることを確認する必要があります。
3. 分類マーク
- PARTIAL_WAKE_LOCK: CPU を動作させ続けます。画面とキーボードのライトはオフになる場合があります。
- SCREEN_DIM_WAKE_LOCK: CPU を実行し続け、画面は表示されたままになりますが、灰色になる場合があります。キーボード ライトはオフになります。
- SCREEN_BRIGHT_WAKE_LOCK: CPU を実行し続け、画面を強調表示し、キーボード ライトをオフにします。
- FULL_WAKE_LOCK: CPU を実行し続け、画面を強調表示したままにし、キーボード ライトも明るさを維持します。
- ACQUIRE_CAUSES_WAKEUP: 画面を強制的に点灯します。たとえば、アプリケーションが通知を受信した後、画面が点灯します。
- ON_AFTER_RELEASE: WakeLock を解除した後、画面はすぐにオフにならず、一定期間画面がオンのままになります。
- UNIMPORTANT_FOR_LOGGING: 非表示フラグ。システム レベルでのみ使用されます。
- DOZE_WAKE_LOCK/DRAW_WAKE_LOCK: 非表示の分類。システム レベルでのみ使用されます。
- PROXIMITY_SCREEN_OFF_WAKE_LOCK: 近接センサーに基づいて画面をオフにします。最も典型的な使用シナリオは、耳に近づけて電話をかけると、画面が自動的にオフになることです。
4. 使用方法
WakeLock は PowerManager の内部クラスであり、そのコード パスは次の場所にあります。
フレームワーク/ベース/コア/java/android/os/PowerManager.java
(1) AndroidManifest.xmlに権限を設定する
<uses-permission android:name="android.permission.WAKE_LOCK" />
(2) PowerManagerクラスを通じてWakeLockクラスのインスタンスオブジェクトを取得する
通常、onResume() でacquire() メソッドを呼び出し、onPause() メソッドで release() メソッドを呼び出すことができます。
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "tag:CpuKeepRunning");
//或 执行 wakeLock.acquire();
wakeLock.acquire(1000 * 60);
@Override
protected void onResume() {
super.onResume();
//可以在onResume()中执行acquire()方法
if (wakeLock!= null) {
wakeLock.acquire();
}
}
@Override
protected void onPause() {
super.onPause();
if (wakeLock!= null) {
wakeLock.release();
}
}
(3) 注意事項
- 公式は、この方法で画面をオンにしたままにすることを推奨していません。不適切に使用すると、アプリが「バッテリーキラー」になる可能性があります。他の 2 つの方法をお試しください。
- WakeLock を適用するには、acquire() とacquire(long timeout) の 2 つの方法があり、後者の方が比較的安全です。WakeLock を解除するのを忘れた場合、タイムアウト期間後にシステムが自動的に WakeLock を解除します。通常、WakeLock は使用後すぐに解除する必要がありますが、解除を忘れるとすぐに電源が切れてしまいます。
- 問題を防ぐために、タイムアウト付きの WakeLock.acquire() バージョンを使用することをお勧めします。これにより、制限時間を超えた後に WakeLock が解放されます。たとえば、ビデオを再生するときに、ビデオの再生時間をタイムアウトとして使用すると、ビデオの再生後に WakeLock が自動的に解除されます。ソース コードから、その原理は、acquire() を呼び出して WakeLock を適用し、時間に達した後に自動的に解放するときに、Handler.postDelay() を通じて遅延メッセージを送信することであることがわかります。
- 無期限の Wakelock を使用しないでください。これにより、デバイスとアプリケーションが長時間スリープ状態にならず、最終的にはデバイスのバッテリーが消耗します。
- SCREEN_ON、SCREEN_DIM、SCREEN_BRIGHT、およびその他のタイプの Wakelock は、必要な場合にのみ使用してください。他のタイプの Wakelock は、アプリケーションのニーズをより適切に満たすことができます。
- アプリが適切に動作しない場合、または必要な動作を実行しない場合を除き、可能であれば Wakelock の使用を避けてください。
(4) 最適化施策
Wakelock の使用時にバッテリーの消耗を最小限に抑えるために、次の最適化を実行できます。
- Wakelock は必要な場合にのみ適用し、タスクが完了したらできるだけ早く解放します。
- フラグを使用すると、Wakelock を頻繁に適用したり解放したりすることなく、デバイスが起動しているかどうかを簡単に確認できます。
- Wakelock の使用を最適化して無効なウェイクアップ操作を回避し、バッテリーの消費を削減します。
- バッテリー寿命をより良く保つために、Wakelock の代わりに AlarmManager や JobScheduler などのスケジュールされたタスクを使用してください。
(5) まとめ
Android Wakelock は、Android が提供するロック メカニズムであり、アプリケーションがバックグラウンドでタスクを実行し続けることができるようにデバイスを起動状態に保ちます。Wakelock の使用は非常に簡単です。アウェイク状態を維持する必要がある場合は、Wakelock.acquire() メソッドを呼び出すだけです。アウェイク状態を維持する必要がない場合は、Wakelock.release() メソッドを呼び出すことができます。終わらせる方法。Android Wakelock を使用する場合、Wakelock.release() メソッドを呼び出して Wakelock を解放する、Wakelock の悪用を避けるなど、いくつかの問題に注意する必要があります。