Androidクラスのプログラミングを学んでいますが、finish()がアクティビティのライフサイクルにどのように適合するかについて簡単な質問があります。
Finish()を呼び出すと、どのライフサイクルコールバックが開始されますか? onPause()、onStop()、onDestroy()の順だと思います。これは正しいです?
本当に、onDestroy()に直接ジャンプしないことを確認したいだけです。
あなたは正しいです。 onPause、onStop、onDestroy。
ここ はドキュメントです。
本当に、onDestroy()に直接ジャンプしないことを確認したいだけです。 ???
ただし、finish()を呼び出すと、アクティビティのライフサイクルが中断する場合、1つの例外があります。 )これは、uがonCreate()メソッドからfinish()を呼び出すときに発生します。この場合、onDestroy()がすぐに呼び出されます!
http://developer.Android.com/reference/Android/app/Activity.html#onCreate(Android.os.Bundle)
はい、onPauseとonStopをスキップしてonDestroy()にジャンプしません。
また、興味があるかもしれませんonPostResume()、onPostPause()、onPostCreate()、onUserLeaveHint()など...これらはアクティビティのライフサイクルにリストされていません
そのような問題や問題を分析することも非常に興味深いかもしれません。たとえば、onPause()メソッドでdebuggin-breakpointを設定し、このポイントからプログラムフローを調査できます。
また、いくつかのプリントアウトはあなたにいくつかの有用な情報を与えることができます。
たとえば、System.out.println( "メソッドの名前" + "呼び出されました。");と書くことができます。あなたが呼ぶと思うあなたの活動のそれぞれの方法で。 (たとえば、onPause()を上書きし、super.onPause()を呼び出し、コンソールのプリントアウトを配置して、メソッドが呼び出されるかどうかを確認します。
開発中にAndroidシステムがこのような小さな調査を行うことについて、多くのことを学びます。
新しいAndroidアプリを作成し、これをメインアクティビティに配置します。
次に、出力のLogCatウィンドウ(AndroidのDDMSの下)を表示します
同じようにアプリケーションをビルドします-出力を含むすべてのonPause、onStopなどのメソッドをLogCatに追加します。
プログラムの実行中に、何がいつ呼び出されるかを監視できます。
package com.app.myapp;
import Android.app.Activity;
import Android.os.Bundle;
import Android.util.Log;
import Android.view.View;
import Android.widget.Button;
import Android.widget.LinearLayout;
public class MyApp extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
LinearLayout layout = new LinearLayout(this);
Button exit = new Button(this);
exit.setText("finish");
exit.setOnClickListener(new Button.OnClickListener()
{
public void onClick(View v)
{
// TODO Auto-generated method stub
Log.v("MyApp", "finish");
finish();
}
});
layout.addView(exit);
setContentView(layout);
Log.v("MyApp", "onCreate");
}
@Override
protected void onDestroy()
{
// TODO Auto-generated method stub
super.onDestroy();
Log.v("MyApp", "onDestroy");
}
@Override
protected void onPause()
{
// TODO Auto-generated method stub
super.onPause();
Log.v("MyApp", "onPause");
}
@Override
protected void onRestart()
{
// TODO Auto-generated method stub
super.onRestart();
Log.v("MyApp", "onRestart");
}
@Override
protected void onResume()
{
// TODO Auto-generated method stub
super.onResume();
Log.v("MyApp", "onResume");
}
@Override
protected void onStart()
{
// TODO Auto-generated method stub
super.onStart();
Log.v("MyApp", "onStart");
}
@Override
protected void onStop()
{
// TODO Auto-generated method stub
super.onStop();
Log.v("MyApp", "onStop");
}
}