私はレシーバーで遊ぶ時間がありませんでした。また、2.3.xを超えるものに慣れていないので、この質問を読んだときに完全に戸惑いました。AndroidManifestに
登録されたBroadcastReceiverは、アプリケーションプロセスが強制終了されたときにインテントを受信できますか?
その作成者は、タスクマネージャーリストでBroadcastReceiverアプリケーションを確認できます。アプリが強制終了されると、ブロードキャストレシーバーは呼び出されなくなります。これは、3.1で導入された新しいメカニズムによるものです:http:
//developer.android.com/sdk/android-3.1.html#launchcontrols
そのリンクには、アプリケーションの停止状態が記載されています。アプリケーションのライフサイクルは、ドキュメントAFAIKのどこにも説明されていないため、アプリは次の3つの状態のいずれかになります。
- 停止しました(RAMにはありません)
- 開始(RAM内、実行されていない)
- 実行中(RAM内)
ユーザーがタスクマネージャーでアプリを表示できるようにするには、アプリが開始状態または実行状態のいずれかである必要があります(さらに状態があるかどうかわからないため、ここで推測しています)。そして、アプリはかなりの時間リストに表示されていたようです。レシーバーアプリが起動または実行されている場合は、独自のDalvikVMインスタンスを備えたLinuxホスティングプロセスが必要です。これは、レシーバーがどのように機能するかについての私の以前の信念と矛盾しています。
- レシーバーが実行されていない場合、システムのパフォーマンスが低下することはありません。
- 受信者に通知する必要があると、新しいフォアグラウンドプロセスが生成され(まだ実行されていない場合)、新しい受信者がインスタンス化され、
onReceive
メソッドが呼び出されます。 - 最大処理時間が10秒後に
onReceive
戻り、追加のサービスまたはアクティビティがない場合、ホスティングプロセスが強制終了され、リソースが解放される可能性が非常に高くなります。
だから、私の質問:
- アプリがタスクマネージャーに表示されているが(したがってプロセスがある)、まだ通知されていない場合、OSが通知されていない(まったく通知されていない可能性がある)レシーバーのプロセスを生成するのはなぜですか? 。アプリに通知されたが、プロセスがまだ強制終了されていない場合(したがって、タスクマネージャーに一覧表示されている場合)、OSが完了後すぐに強制終了しないのはなぜですか?ここでは、タスクマネージャーがプロセスが割り当てられている場合にのみアプリケーションを表示すると想定していますが、これにより次の質問が発生します。
- レシーバープロセスがタスクマネージャーにリストされる可能性はどのくらいありますか?タスクマネージャーは、停止している場合でもレシーバーアプリを表示しますか?もしそうなら、これは3.1以降の新しい動作であり、ユーザーはそれが存在することに気づき、強制的に閉じることができますか?そうでない場合、アプリケーションは、呼び出しの途中
onReceive
または戻った後、強制終了の対象となる場合にのみリストに表示されます。これは、ドキュメントによると、短い間隔である必要があります。
前もって感謝します。