彼らがレシーバーを有効 = false と宣言する理由がわかりません。
レシーバーは必ずしも必要ではないためです。
システムがレシーバーをインスタンス化できるようにしたくないのはなぜですか
レシーバーは必ずしも必要ではないためです。
システムによってインスタンス化できない XML でレシーバーを宣言するポイントは何ですか?
レシーバーは、後で必要になったときに有効にできるためです。
たとえば、 の実装を提供する Download アプリケーションのようなものを実装しているとしDownloadManager
ます。ファイルのダウンロード中に、おそらくデバイスが再起動します。理想的には、再起動が完了した後にダウンロードを再開したいと考えています。ただし、ほとんどの場合、ファイルはダウンロードされていないため、通常はブート時に制御を取得する必要はありません。
怠惰なアプローチは、起動時に常に制御を取得し、再起動時に未処理のダウンロードがあったかどうかを確認し、ある場合はダウンロードを再開し、ない場合はただ立ち去るというものです。これは、Android にプロセスを fork させ、一連のプロセス設定作業を強制するため、無駄です。最終的には、ユーザーのために何もしません。
より良いアプローチは、ブート完了レシーバーを通常どおり無効にすることです。ファイルのダウンロード要求が来たら、setComponentEnabledSetting()
onを使用してレシーバーを有効PackageManager
にし、ダウンロードが完了したら再度無効にします。現在、進行中のダウンロードがある再起動時にのみ、起動時に制御を取得し、残りの時間の起動プロセスを高速化します.
より一般的には、マニフェストに登録されたレシーバーからのブロードキャスト (特にシステム ブロードキャスト) をリッスンしたいが、ごくたまにsetComponentEnabledSetting()
. 通常、受信機を無効にすることから始めますが、これは厳密な要件ではありません。