首先创建两个Activity
ActivityA如下:
package com.z.ok;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class ActivityA extends Activity implements OnClickListener {
private Button one;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.one);
Log.i("INFO","A onCreate()");
one = (Button)findViewById(R.id.one);
one.setOnClickListener(this);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.i("INFO","A onDestroy()");
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
Log.i("INFO","A onPause()");
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
Log.i("INFO","A onRestart()");
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.i("INFO","A onResume()");
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Log.i("INFO","A onStart()");
}
@Override
protected void onStop() {
super.onStop();
Log.i("INFO","A onStop()");
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(ActivityA.this,ActivityB.class);
startActivity(intent);
// finish();
}
}
ActivityB如下:
package com.z.ok;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class ActivityB extends Activity implements OnClickListener {
private Button two;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.two);
Log.i("INFO","B onCreate()");
two = (Button)findViewById(R.id.two);
two.setOnClickListener(this);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.i("INFO","B onDestroy()");
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
Log.i("INFO","B onPause()");
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
Log.i("INFO","B onRestart()");
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.i("INFO","B onResume()");
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Log.i("INFO","B onStart()");
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.i("INFO","B onStop()");
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(ActivityB.this,ActivityA.class);
startActivity(intent);
// finish();
}
}
启动APP
ActivityA启动,打印信息如下:
A onCreate();//创建,初始化组件
A onStart();//让ActivityA显示
A onResume();//让ActivityA可操作
1.ActivityA启动ActivityB未调用finishi()方法
打印信息如下:
A onPause();//ActivityA不可操作
B onCreate();//创建,初始化组件
B onStart();//让ActivityB显示
B onResume();//让ActivityB可操作
A onStop();//让ActivityA不显示
此时ActivityB按Back返回到ActivityA,打印信息如下:
B onPause();
A onRestart();
A onStart();
A onResume();
B onStop();
B onDestroy();
注意:按下Back返回键,当前Activity会被销毁,因而调用onDestroy()方法
2.ActivityA启动ActivityB且ActivityA调用了finish()
打印信息如下:
A onPause();//不可操作
B onCreate();//创建,初始化组件
B onStart();//让ActivityB显示
B onResume();//让ActivityB可操作
A onStop();//让ActivityA不显示
A onDestroy();//ActivityA销毁
3.ActivityA启动后直接按HOME键回到界面,打印消息如下:
A onCreate();//创建,初始化组件
A onStart();//让ActivityA显示
A onResume();//让ActivityA可操作
A onPause();//不可操作
A onStop();//不显示界面
从桌面回到ActivityA界面,打印消息如下:
A onRestart();
A onStart();
A onResume();
4.如果ActivityB是个Dialog(显示出来并未将ActivityA完全覆盖)ActivityA启动ActivityB未调用finish()方法,打印信息如下:
A onPause();
B onCreate();
B onStart();
B onResume();
//此处不会调用A onStop();因为B是个Dialog并未将ActivityA完全覆盖
点击空白处:
B onPause();
A onResume();
B onStop();
B onDestroy();
5.ActivityA启动ActivityB且调用了finish();
A onPause();
B onCreate();
B onStart();
B onResume();
A onStop();//界面消失
A onDestroy();//销毁
点击空白处
B onPause();
B onStop();//因为A已经销毁了
B onDestroy();
最后:
如果ActivityA启动ActivityB(未调用finish()方法)
且ActivityB启动ActivityC(未调用finish()方法)
销毁日志:
<pre name="code" class="java">A onDestroy();
如果ActivityA启动ActivityB(调用finish()方法)
且ActivityB启动ActivityC(未调用finish()方法)
销毁日志:B onDestroy(); //由于ActivityA已经调用finish()方法销毁了
小结:onDestroy()方法只有在调用finish()方法或者Back返回键时调用,如果强杀进程,只会调用最开始的Activity的onDestroy()
(即ActivityA启动ActivityB启动ActivityC,然后直接杀进程,只会调用A onDestroy())
onRestart()方法的调用时由于该Activity并未调用onDestroy()方法销毁,可以理解为重新唤起
onPause()方法和onResume()方法是对应的,前者不可操作,后者可操作
onStart()方法和onStop()方法也是对应的,前者显示界面,后者不显示