首先,创建一个android project,包含两个ActivityA和ActivityB
分十种情况讨论
第一,正常启动Activity A,输出结果如下:
第二,从ActivityA跳到ActivityB,并且ActivityB全屏。即ActivityA被ActivityB完全完全覆盖,输出结果如下:
第三,在第二种的情况下,从ActivityB返回到ActivityA,输出结果如下:
第四,从ActivityA跳到ActivityB,并且ActivityB非全屏。即ActivityA没有被ActivityB完全完全覆盖,输出结果如下:
第五,在第四种的情况下,从ActivityB返回到ActivityA,输出结果如下:
第六,在第一种情况下,点击home键,输出结果如下:
第七,在第六种的情况下,长按home键盘,从任务管理器中调出ActivityA,输出结果如下:
第八,在第一种情况下,点击电源键,输出结果如下:
第九,在第八种的情况下,在打开电源键回到ActivityA,输出结果如下:
第十,退出ActivityA,输出结果如下:
在对上述十种情况讨论完,可能觉得有点复杂,其实一点都不复杂,在梳理一下。首先最容易发现的是onCreate和onDestroy从头到尾都只执行了一次。onCreate在一个活动最先开始启动的时候执行了一次,onDestroy在活动结束关闭的时候执行了一次。另外可以发现除了在第四五两种情况下,其余情形的结果都相同,离开活动A,则A一次执行onPause和onStop,并且返回A的时候,一次执行onRestart、onStart和onResume。于是可以得出如下结论。只要不是在A进入到非全屏的其它活动中,则A执行onPause和onStop,反之只执行一个onPause,从其它活动返回,A执行onRestart、onStart和onResume,反之执行onResume。
在测试四五两种情况的时候,只要在AndroidManifest.xml中队ActivityB的节点中添加如下一行代码:
android:theme="@android:style/Theme.Dialog"
附活动ActivityA代码:
package com.yuxianglong.view; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; /** * * @ClassName: ActivityA * @Description: 对Activity生命周期的测试,重载了onCreate,onStart,onResume, * onStop,onPause * onDestroy,onRestart七个方法 * @author yuxianglong * @date 2013-7-9 上午9:09:22 * */ public class ActivityA extends Activity { private Button button; private String Tag = "yuxlong2010"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(Tag, "I'm onCreate"); setContentView(R.layout.activity_a); button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub startActivity(new Intent(ActivityA.this,ActivityB.class)); } }); } @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); Log.d(Tag, "I'm onStart"); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); Log.d(Tag, "I'm onResume"); } @Override protected void onStop() { // TODO Auto-generated method stub super.onStop(); Log.d(Tag, "I'm onStop"); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); Log.d(Tag, "I'm onDestroy"); } @Override protected void onRestart() { // TODO Auto-generated method stub super.onRestart(); Log.d(Tag, "I'm onRestart"); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); Log.d(Tag, "I'm onPause"); } }