2010-12-24 17 views
1

アクティビティとプロセスのライフサイクルに関するいくつかの質問/回答を読んだ後。私は、活動とプロセスライフサイクルに関する詳細を理解していると思います。しかし、私はBroadcastReceiver/ContentObserverのようなObserverについてはプロセスのライフサイクルについて混乱しています。プロセス内のBroadcastReceiverライフサイクルは何ですか?

私が知りたいことは、私はBroadcastReciverを登録する際BroadcastReceiverを登録プロセスがすでに存在していなければ、(つまりは、BroadcastReceiverの意図を受け取るSMSに聞く)、あるシステムがBroadcastReceiverを呼び出したときに

  1. 同じプロセスですか?
  2. プロセスが終了しないため、プロセス内のこれらの静的データを直接使用することはできますか?
  3. 一方、プロセスが既に終了している場合、システムはプロセスを再開しますが、もちろんこれらの静的データはnullですか?
  4. システムがBroadcastReceiverを呼び出すと、メインアクティビティも呼び出しますか?

ありがとうございます。

答えて

4

1.)「BroadcastReceiverを登録したプロセス」の意味が不明です。あなたのBroadcastRecevier()に名前付きのプロセスを提供した場合、その名前はアプリケーションのパッケージに名前属性(XYZ)を加えた名前のプロセスで作成されます。その名前のプロセスがすでに存在する場合、新しいプロセスは作成されず、既存のプロセス内にBroadcastReceiverが作成されます。

2.)したがって、プロセスがまだメモリに残っている場合は、静的データがすでに初期化されている可能性があります。

3.)この場合、すべての静的データを再初期化する必要があります。

4.)BroadcastReceiverのプロセスがまだ存在しない場合、プロセスが作成されますが、BroadcastReceiverがプロセスで作成される唯一のものになります。アクティビティは開始されません。

アクティビティを「メイン」アクティビティにする唯一のものは、特定の種類のインテントをandroid.intent.action.MAINのアクションで処理するために登録されていることです。これは、アプリが起動されたときに放送されるインテントの一種です。ユーザーはすでに実行中のアプリに切り替えることができます。この場合、アクションMAINがブロードキャストされていないインテントがあるため、「メイン」アクティビティは再生されません。要点は、「メイン」アクティビティでは、それが実行されるプロセスと特別な関係がなく、特定の種類のインテントとの特別な関係しかないことです。

+0

Android 3.1では、対応するアプリケーションがユーザによって起動されたことがない場合、またはユーザがAndroidメニュー(アプリケーションの管理)でアプリケーションを明示的に停止した場合、AndroidシステムはデフォルトですべてのBroadcastReceiverを受信から除外します。 –

0

BroadcastReceiversContentObserversはかなりかなり異なっています。

1.)はい、一般的にあなたがしていることは、非常に明確に定義されていない限り、同じプロセスです。

2.)この質問は意味をなさない。何を聞いていますか?

3)もう一度、意味がありません。どのような静的データですか?

4.)いいえ。ブロードキャストレシーバは、アクティビティとはまったく異なります。放送受信機が放送を受信するときに呼び出される唯一のものは、そのonReceive()メソッドです。

+0

静的データとは、静的なクラスフィールド(シングルトンの実装)を意味します。私はアプリケーションロジックデータをそこに保存します。ご返信ありがとうございます。 –

+0

質問4について、私は本当に質問したい、システムは私の主なアクティビティ(クラスMainActivityはアクティビティを拡張)onCreateメソッドを呼び出しますか? –

+0

私は質問4に答えました。いいえ。放送受信者はあなたの活動とは何の関係もありません。どのアクティビティがonCreateを呼び出すのか、それはどういうことでしょうか?あなたの2/3の質問はまだ不明です。 – Falmarri

関連する問題