web-dev-qa-db-ja.com

finish()とアクティビティのライフサイクル

Androidクラスのプログラミングを学んでいますが、finish()がアクティビティのライフサイクルにどのように適合するかについて簡単な質問があります。

Finish()を呼び出すと、どのライフサイクルコールバックが開始されますか? onPause()、onStop()、onDestroy()の順だと思います。これは正しいです?

本当に、onDestroy()に直接ジャンプしないことを確認したいだけです。

11
Karl Giesing

あなたは正しいです。 onPause、onStop、onDestroy。

ここ はドキュメントです。

4
digidigo

本当に、onDestroy()に直接ジャンプしないことを確認したいだけです。 ???

番号!

ただし、finish()を呼び出すと、アクティビティのライフサイクルが中断する場合、1つの例外があります。 )これは、uがonCreate()メソッドからfinish()を呼び出すときに発生します。この場合、onDestroy()がすぐに呼び出されます!

http://developer.Android.com/reference/Android/app/Activity.html#onCreate(Android.os.Bundle)

7
ceph3us

はい、onPauseとonStopをスキップしてonDestroy()にジャンプしません。

また、興味があるかもしれませんonPostResume()、onPostPause()、onPostCreate()、onUserLeaveHint()など...これらはアクティビティのライフサイクルにリストされていません

3
Arpit Garg

そのような問題や問題を分析することも非常に興味深いかもしれません。たとえば、onPause()メソッドでdebuggin-breakpointを設定し、このポイントからプログラムフローを調査できます。

また、いくつかのプリントアウトはあなたにいくつかの有用な情報を与えることができます。

たとえば、System.out.println( "メソッドの名前" + "呼び出されました。");と書くことができます。あなたが呼ぶと思うあなたの活動のそれぞれの方法で。 (たとえば、onPause()を上書きし、super.onPause()を呼び出し、コンソールのプリントアウトを配置して、メソッドが呼び出されるかどうかを確認します。

開発中にAndroidシステムがこのような小さな調査を行うことについて、多くのことを学びます。

1
Jan Koester

新しい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");
    }

}
0
mrres1