回答:
すぐに終了するか、それが呼び出された関数を完了しますか?
呼び出されたメソッドfinish()
は最後まで実行されます。finish()
Androidに制御を戻すまで、操作は開始されません。
以下のようなすべてのライフサイクルイベントonCreate
、onResume
、onPause
.... onDestroy
「メインスレッド」 -活動のは、常に単一のスレッドで呼び出されます。
つまり、このスレッドは、すべてのアクティビティイベントがポストされるキューによってサポートされます。このスレッドは、これらのすべてのイベントを挿入順に実行できます。
...のfinish()
ようなライフサイクルコールバックの1つを呼び出している場合onCreate()
、「完了」メッセージがこのキューに追加されますが、現在実行中のメソッドが返されるまでスレッドは「完了」アクションを自由に選択して実行できません。現在のタスク。
ondestroy()
アクティビティが破棄される前に受け取る最後の呼び出しです。
これは、アクティビティが終了している(誰かが呼び出さfinish()
れている、またはシステムがアクティビティのこのインスタンスを一時的に破棄してスペースを節約している)ために発生する可能性があります。isFinishing()
メソッドでこれら2つのシナリオを区別できます。
2つのアクティビティAとBがある場合、フローはA> Bからになります。およびB = A呼び出しfinish()
。
そして、
finish()
Markが述べたように、呼び出し元のメソッドが実行されます。そして、コールバックの流れは次のようになります-
onPause()
の activity A
onRestart()
> onStart()
> onResume()
アクティビティBのfinish()
からactivity A
。唯一onStop()
のActivity A
ここで呼び出されます。この場合、どこから呼び出しfinish()
たのかActivity A
、したがってonStop()
、onDestroy()
両方が必要になりますactivity A
。