AndroidではActivity.finish()はどのように機能しますか?


回答:


123

すぐに終了するか、それが呼び出された関数を完了しますか?

呼び出されたメソッドfinish()は最後まで実行されます。finish()Androidに制御を戻すまで、操作は開始されません。


3
次に、StartAvtivityforResults()によって呼び出されたアクティビティを完了せずに終了するにはどうすればよいですか?
Ayush Pateria、

@CommonsWare onStopが常に呼び出されるようにする方法を教えてください。私のアプリでは、OnStopとonDestroyが呼び出されない場合があり、その場合、子アクティビティの完了に時間がかかりすぎて、アプリがハングしたように見えます...一方、onStopが呼び出されると、すべてが正常に動作します。私はAndroid 2.3.6でGalaxyを使用しています... stackoverflow.com/questions/13928591/で私の質問を参照してください… plzヘルプ!!!
2012

@CommonsWare私は非常にtrueをテストしました。+ 1ですが、finish()を関数の最初のステートメントとして記述した1つの質問をすると、関数全体が実行され、finish()が呼び出されます。
Nikhil Agrawal 2013年

@ NikhilAgrawal、finish()が呼び出された直後に関数を返すことができます。
antonio081014 2013

finish()はonDestroy()を呼び出す前にonPause()とonStop()も呼び出しますか?
sr09 2014

20

以下のようなすべてのライフサイクルイベントonCreateonResumeonPause.... onDestroy「メインスレッド」 -活動のは、常に単一のスレッドで呼び出されます。

つまり、このスレッドは、すべてのアクティビティイベントがポストされるキューによってサポートされます。このスレッドは、これらのすべてのイベントを挿入順に実行できます。

...のfinish()ようなライフサイクルコールバックの1つを呼び出している場合onCreate()、「完了」メッセージがこのキューに追加されますが、現在実行中のメソッドが返されるまでスレッドは「完了」アクションを自由に選択して実行できません。現在のタスク。


13

ondestroy() アクティビティが破棄される前に受け取る最後の呼び出しです。

これは、アクティビティが終了している(誰かが呼び出さfinish() れている、またはシステムがアクティビティのこのインスタンスを一時的に破棄してスペースを節約している)ために発生する可能性があります。isFinishing() メソッドでこれら2つのシナリオを区別できます。


1

2つのアクティビティAとBがある場合、フローはA> Bからになります。およびB = A呼び出しfinish()

そして、

finish()Markが述べたように、呼び出し元のメソッドが実行されます。そして、コールバックの流れは次のようになります-

  1. onPause()activity A
  2. onRestart()> onStart()> onResume()アクティビティBの
  3. 次に、本当の違いが来ます。あなたが呼び出していない場合はfinish()からactivity A。唯一onStop()Activity Aここで呼び出されます。この場合、どこから呼び出しfinish()たのかActivity A、したがってonStop()onDestroy()両方が必要になりますactivity A
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.