12

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

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

本当に、onDestroy() に直接ジャンプしないようにしたいだけです。

4

5 に答える 5

8

本当に、onDestroy() に直接ジャンプしないようにしたいだけです。???

いいえ!

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

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

于 2015-05-14T01:04:55.057 に答える
7

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

ここにドキュメントがあります。

于 2012-09-29T19:50:13.560 に答える
3

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

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

于 2012-09-29T19:52:49.460 に答える
1

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

また、一部の印刷物は、役立つ情報を提供します。

たとえば、 System.out.println("メソッドの名前" + "呼び出された"); と書くことができます。呼び出されると思われるアクティビティの各メソッドで。(たとえばonPause()を上書きし、 super.onPause ()を呼び出して、メソッドが呼び出されたかどうかを確認するためにコンソールの出力を配置します。

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

于 2012-09-29T19:59:20.567 に答える
0

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

}
于 2012-09-29T20:42:38.887 に答える