Save the date! Android Dev Summit is coming to Sunnyvale, CA on Oct 23-24, 2019.

ブロードキャスト レシーバーをオンデマンドで操作する

端末の状態変化を監視する最も簡単な方法は、監視している状態ごとに BroadcastReceiver を作成し、それぞれをアプリケーション マニフェストに登録することです。 次に、これらの各レシーバー内で、現在の端末状態に基づいて繰り返しアラームを再スケジュールするだけです。

このアプローチのデメリットは、これらのレシーバーのいずれかがトリガーされるたびにアプリが端末を起動することです。これが必要以上に頻繁に発生する可能性があります。

これよりも適切なアプローチは、実行時にブロードキャスト レシーバーを無効または有効にすることです。そうすることで、マニフェストで宣言したレシーバーを、必要なときにのみシステム イベントによってトリガーされる受動的なアラームとして使用できます。

状態変化レシーバーの切り替えと段階的な使用によって効率性を高める

PackageManager を使用すると、次のスニペットに示すように、有効または無効にするブロードキャスト レシーバーを含め、マニフェストで定義された任意のコンポーネントの有効状態を切り替えることができます。

ComponentName receiver = new ComponentName(context, myReceiver.class);

PackageManager pm = context.getPackageManager();

pm.setComponentEnabledSetting(receiver,
        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
        PackageManager.DONT_KILL_APP)

この手法を使用すると、接続が失われたことを特定した場合に、接続変化レシーバー以外のすべてのレシーバーを無効にすることができます。 逆に、接続された場合は接続変化をリッスンするのを停止し、アップデートの実行と繰り返しアップデート アラームの再スケジュールの直前にオンラインかどうかを確認できます。

同じ手法を使用して、高帯域幅を必要とするダウンロードを遅らせることができます。接続変化をリッスンして Wi-Fi への接続後にのみダウンロードを開始するブロードキャスト レシーバーを有効にするだけです。