我正在学习一门课程的Android编程,我有一个关于finish()如何适应Activity生命周期的快速问题。
当你调用finish()时,会启动什么生命周期回调?我认为它是onPause(),然后是onStop()和onDestroy()。这是对的吗?
真的,我只是想确保它不直接跳到onDestroy()。
答案 0 :(得分:6)
真的,我只是想确保它不直接跳到onDestroy()。 ???
但在活动生命周期中断时调用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");
}
}