デバイスの起動状態を維持する

バッテリーの消耗を防ぐため、アイドル状態の 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 の解放は重要なので、 すぐに使い始めることができるため、バッテリーの消耗が抑えられます。