バッテリーの消耗を防ぐため、アイドル状態の Android デバイスは短時間で落下します。 。ただし、場合によってはアプリで画面を復帰させる 処理を完了するためにウェイクアップ状態にします
どの方法を採用するかは、アプリのニーズによって異なります。ただし 一般的なルールで 最も軽量なアプローチを 使用して、システム リソースに対するアプリの影響を最小限に抑えます。以下のセクション デバイスのデフォルトのスリープ動作が アプリの要件に適合しません
wake lock の使用に代わる方法
アプリにウェイクロック サポートを追加する前に、アプリで は、次のいずれかの代替ソリューションをサポートしています。
アプリで長時間実行される HTTP ダウンロードを行う場合は、
DownloadManager
。アプリが外部サーバーからデータを同期している場合は、 同期アダプターを使用します。
アプリがバックグラウンド サービスに依存している場合は、 JobScheduler または Firebase Cloud Messaging 特定の間隔でこれらのサービスをトリガーできます。
コンパニオン デバイスが動作しているときは常にコンパニオン アプリを実行しておく必要がある場合は、 コンパニオン デバイス マネージャーを使用します。
画面をオンのままにする
特定のアプリ(ゲームや映画アプリなど)では画面をオンのままにする必要があります。「
それには、Terraform の
FLAG_KEEP_SCREEN_ON
アクティビティ内のみ(アクティビティ内のみで、サービスや他のアプリでは不可)
コンポーネント)。例:
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); } }
この方法の利点は、ウェイクロック( CPU オン)を使用しており、特別な権限は必要ありません。 ユーザーがアプリケーション間を行き来するのを適切に管理します。 未使用のリソースの解放を 気にする必要がなくなります
もう 1 つの方法は、アプリケーションのレイアウト XML ファイルで、
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>
android:keepScreenOn="true"
を使用することは、以下を使用することと同じです。
FLAG_KEEP_SCREEN_ON
。
アプリに最適な方法を使用できます。リソース使用率を
アクティビティのフラグをプログラマティックに使用した場合、
後でプログラムでフラグをクリアして
オフにします。
テレビの背景モード
テレビでは、
FLAG_KEEP_SCREEN_ON
使用しないように、デバイスの保護に
背景モード
アクティブな動画再生中に発生します。FLAG_KEEP_SCREEN_ON
が設定されていない場合
自動的に背景モードに切り替わる
非アクティブな状態が一定期間続いた後
CPU をオンのままにする
リクエストの前にいくつかの作業を完了するために CPU を実行したままにする必要がある場合、
デバイスがスリープ状態になった場合は、
PowerManager
システム サービス機能
備えています。wake lock を使用すると、アプリが電源状態を制御できるようになります
通信します。
wake lock を作成して保持すると、ホストデバイスの
バッテリー駆動時間。そのため、ウェイクロックは本当に必要な場合にのみ使用し、
保持します。たとえば、サーバーを
アクティビティで wake lock を使用する前述のとおり、以前のルールを
アクティビティで画面をオンにする場合は、
FLAG_KEEP_SCREEN_ON
。
wake lock を使用する正当な理由の一つとして、 画面が動作している間も CPU を動作させ続けるために wake lock を取得する必要がある オフにします。ただし この手法は バッテリー駆動時間。
wake lock を使用するには、まず
WAKE_LOCK
権限
アプリケーションのマニフェスト ファイルに追加します。
<uses-permission android:name="android.permission.WAKE_LOCK" />
サービスを使用して処理を行うブロードキャスト レシーバがアプリに含まれている場合は、 wake lock を直接設定する方法は次のとおりです。
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();
wake lock を解除するには、
wakelock.release()
。
これにより、CPU に対する申し立てが取り下げられます。wake lock の解放は重要なので、
すぐに使い始めることができるため、バッテリーの消耗が抑えられます。