1

Activity では、onCreate でレシーバーを登録し、onDestroy で登録解除します。すべての onCreate の後に次の onCreate の後に onDestroy が続く場合、正常に動作するはずです。それ以外の場合、onCreate が onDestroy よりも多く呼び出されている場合、レシーバーが複数回登録され、アプリが誤動作します。

だから私の質問は:

  1. 受信者を onCreate に登録し、onDestroy で登録解除してもよろしいですか?
  2. onCreate の後には、次の onCreate の前に常に onDestroy が続きますか?
4

2 に答える 2

2

onDestroyは、呼び出されることが保証されていません。

http://developer.android.com/reference/android/app/Activity.html#onDestroy%28%29

「」

保護されたvoidonDestroy()

APIレベル1で追加アクティビティが破棄される前に、最終的なクリーンアップを実行します。これは、アクティビティが終了しているため(finish()と呼ばれる人がいるため、またはシステムがスペースを節約するためにアクティビティのこのインスタンスを一時的に破棄しているため)に発生する可能性があります。これら2つのシナリオは、isFinishing()メソッドで区別できます。

注:このメソッドがデータを保存する場所として呼び出されることを期待しないでください!たとえば、アクティビティがコンテンツプロバイダーでデータを編集している場合、それらの編集は、ここではなく、onPause()またはonSaveInstanceState(Bundle)のいずれかでコミットする必要があります。このメソッドは通常、アクティビティに関連付けられているスレッドなどのリソースを解放するために実装されます。これにより、破棄されたアクティビティが、アプリケーションの残りの部分がまだ実行されている間、そのようなものを残さないようにします。システムがこのメソッド(または他のメソッド)を呼び出さずにアクティビティのホスティングプロセスを単に強制終了する場合があるため、プロセスが終了した後も存続することを目的としたことを行うために使用しないでください。

派生クラスは、このメソッドのスーパークラスの実装を呼び出す必要があります。そうでない場合は、例外がスローされます。

「」

このスレッドもご覧ください。

アクティビティOnDestroyは呼び出されませんでしたか?

于 2012-11-08T14:53:54.163 に答える
1

onDestroy is called when the activity is being destroyed. Or removed from the back stack, when ever the user doesn't want it or there is no possible way to get back to it. When your activity wants to receive a broadcast that is fine to do it how you are. If there are no dialogs appearing or notifications or toasts appearing after you receive that should be fine also, if you want to be on the real safe side and only have one activity receiving at a time, and only while the activity is visible move these to onResume and onPause.

You could probably some how unregister when another activity has been brought to the front and re-register after?

于 2012-11-08T11:59:51.080 に答える