12

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

当您调用 finish() 时,会启动什么生命周期回调?我认为它是 onPause(),然后是 onStop() 和 onDestroy()。它是否正确?

真的,我只是想确保它不会直接跳转到 onDestroy()。

4

5 回答 5

8

真的,我只是想确保它不会直接跳转到 onDestroy()。???

不!

但是当调用 finish() 导致活动生命周期中断时有一个例外,当您从 onCreate() 方法调用 finish() 时会发生这种情况,在这种情况下onDestroy() 将立即被调用!

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()方法中设置调试断点,并从该点调查程序流程。

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

例如,您可以编写 System.out.println("name of the method" + " called."); 在您认为被调用的每个活动方法中。(例如覆盖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 回答