finish()和Activity生命周期

时间:2012-09-29 19:44:59

标签: android android-activity activity-lifecycle

我正在学习一门课程的Android编程,我有一个关于finish()如何适应Activity生命周期的快速问题。

当你调用finish()时,会启动什么生命周期回调?我认为它是onPause(),然后是onStop()和onDestroy()。这是对的吗?

真的,我只是想确保它不直接跳到o​​nDestroy()。

5 个答案:

答案 0 :(得分:6)

  

真的,我只是想确保它不直接跳到o​​nDestroy()。 ???

NO!

在活动生命周期中断时调用finish()结果 当你从onCreate()方法调用finish()时会发生这种情况 > onDestroy()将立即被调用!

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

答案 1 :(得分:5)

你是对的。 onPause,onStop,onDestroy。

Here是文档。

答案 2 :(得分:3)

是的,它不会跳转到onDestroy()跳过onPause和onStop。

您也可能对 onPostResume(),onPostPause(),onPostCreate(),onUserLeaveHint()等感兴趣.... 这些未在活动生命周期中列出

答案 3 :(得分:1)

分析此类问题和问题对您来说也很有趣。例如,您可以在 onPause()方法中设置debuggin-breakpoint,并从此处调查程序流。

另外一些打印输出可以为您提供一些有用的信息。

例如,您可以编写System.out.println(“方法名称”+“调用。”);在您认为被称为活动的每种方法中。 (覆盖例如 onPause(),调用 super.onPause()并放置控制台打印输出以查看是否调用该方法。

在开发过程中,您将学习很多关于Android系统进行此类小调查的知识。

答案 4 :(得分: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");
    }

}