我正在为一门课学习 Android 编程,我有一个关于 finish() 如何融入 Activity 生命周期的快速问题。
当您调用 finish() 时,会启动什么生命周期回调?我认为它是 onPause(),然后是 onStop() 和 onDestroy()。它是否正确?
真的,我只是想确保它不会直接跳转到 onDestroy()。
我正在为一门课学习 Android 编程,我有一个关于 finish() 如何融入 Activity 生命周期的快速问题。
当您调用 finish() 时,会启动什么生命周期回调?我认为它是 onPause(),然后是 onStop() 和 onDestroy()。它是否正确?
真的,我只是想确保它不会直接跳转到 onDestroy()。
真的,我只是想确保它不会直接跳转到 onDestroy()。???
但是当调用 finish() 导致活动生命周期中断时有一个例外,当您从 onCreate() 方法调用 finish() 时会发生这种情况,在这种情况下onDestroy() 将立即被调用!
http://developer.android.com/reference/android/app/Activity.html#onCreate(android.os.Bundle)
你是对的。onPause,onStop,onDestroy。
这是文档。
是的,它不会跳过 onPause 和 onStop 跳转到 onDestroy()。
您也可能对onPostResume() 、onPostPause() 、onPostCreate()、onUserLeaveHint()等感兴趣。这些没有在活动生命周期中列出
分析此类问题和问题对您来说也可能非常有趣。例如,您可以在onPause()方法中设置调试断点,并从该点调查程序流程。
此外,一些打印输出可以为您提供一些有用的信息。
例如,您可以编写 System.out.println("name of the method" + " called."); 在您认为被调用的每个活动方法中。(例如覆盖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");
}
}