无简介
Activity的介绍免了(想看点这里),下面直接上代码:
Activity的生命周期
在MainActivity以及SecondActivity中的各个生命周期方法中,用log的方式输出各自的方法名,根据输出的顺序,来观察生命周期方法调用的顺序: MainActivity
/**
* @author sumile
* @WEB https://sumile.cn
* @2015年7月6日 上午10:58:06
* @TODO
*/
public class MainActivity extends Activity {
private final String TAG = “sumile”;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, “MainActivity OnCreate”);
tv = (TextView) findViewById(R.id.tv);
tv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 本方法于2015年7月6日 上午11:04:48由sumile建立
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onStart() {
// 本方法于2015年7月6日 上午10:59:43由sumile建立
super.onStart();
Log.i(TAG, “MainActivity onStart”);
}
@Override
protected void onResume() {
// 本方法于2015年7月6日 上午10:59:49由sumile建立
super.onResume();
Log.i(TAG, “MainActivity onResume”);
}
@Override
protected void onPause() {
// 本方法于2015年7月6日 上午10:59:55由sumile建立
super.onPause();
Log.i(TAG, “MainActivity onPause”);
}
@Override
protected void onStop() {
// 本方法于2015年7月6日 上午11:00:00由sumile建立
super.onStop();
Log.i(TAG, “MainActivity onStop”);
}
@Override
protected void onDestroy() {
// 本方法于2015年7月6日 上午11:00:03由sumile建立
super.onDestroy();
Log.i(TAG, “MainActivity onDestroy”);
}
@Override
protected void onRestart() {
// 本方法于2015年7月6日 上午11:00:07由sumile建立
super.onRestart();
Log.i(TAG, “MainActivity onRestart”);
}
}
SecondActivity
/**
* @sumile
* @WEB https://sumile.cn
* @2015年7月6日 上午11:01:44
* @TODO
*/
public class SecondActivity extends Activity {
private final String TAG = “sumile”;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Log.i(TAG, “SecondActivity OnCreate”);
}
@Override
protected void onStart() {
// 本方法于2015年7月6日 上午10:59:43由sumile建立
super.onStart();
Log.i(TAG, “SecondActivity onStart”);
}
@Override
protected void onResume() {
// 本方法于2015年7月6日 上午10:59:49由sumile建立
super.onResume();
Log.i(TAG, “SecondActivity onResume”);
}
@Override
protected void onPause() {
// 本方法于2015年7月6日 上午10:59:55由sumile建立
super.onPause();
Log.i(TAG, “SecondActivity onPause”);
}
@Override
protected void onStop() {
// 本方法于2015年7月6日 上午11:00:00由sumile建立
super.onStop();
Log.i(TAG, “SecondActivity onStop”);
}
@Override
protected void onDestroy() {
// 本方法于2015年7月6日 上午11:00:03由sumile建立
super.onDestroy();
Log.i(TAG, “SecondActivity onDestroy”);
}
@Override
protected void onRestart() {
// 本方法于2015年7月6日 上午11:00:07由sumile建立
super.onRestart();
Log.i(TAG, “SecondActivity onRestart”);
}
}
运行成功后,在不同操作下,生命周期方法的调用顺序如下:
打开程序
07-06 11:16:18.541: I/sumile(4363): MainActivity OnCreate
07-06 11:16:18.551: I/sumile(4363): MainActivity onStart
07-06 11:16:18.551: I/sumile(4363): MainActivity onResume
锁屏
07-06 11:16:48.941: I/sumile(4363): MainActivity onPause
07-06 11:16:48.951: I/sumile(4363): MainActivity onStop
开屏
07-06 11:17:15.871: I/sumile(4363): MainActivity onRestart
07-06 11:17:15.871: I/sumile(4363): MainActivity onStart
07-06 11:17:16.171: I/sumile(4363): MainActivity onResume
点击按钮切换到第二Activity
07-06 11:17:29.441: I/sumile(4363): MainActivity onPause
07-06 11:17:29.471: I/sumile(4363): SecondActivity OnCreate
07-06 11:17:29.471: I/sumile(4363): SecondActivity onStart
07-06 11:17:29.471: I/sumile(4363): SecondActivity onResume
07-06 11:17:29.941: I/sumile(4363): MainActivity onStop
返回键 返回到第一个Activity
07-06 11:18:08.141: I/sumile(4363): SecondActivity onPause
07-06 11:18:08.151: I/sumile(4363): MainActivity onRestart
07-06 11:18:08.151: I/sumile(4363): MainActivity onStart
07-06 11:18:08.161: I/sumile(4363): MainActivity onResume
07-06 11:18:08.541: I/sumile(4363): SecondActivity onStop
07-06 11:18:08.541: I/sumile(4363): SecondActivity onDestroy
返回键 关闭程序
07-06 11:18:32.821: I/sumile(4363): MainActivity onPause
07-06 11:18:34.021: I/sumile(4363): MainActivity onStop
07-06 11:18:34.061: I/sumile(4363): MainActivity onDestroy
从以上我们可以看出,每次我们要打开一个新的Activity的时候,首先要把自己onPause,然后调用新的Activity的onCreate,onStart,onPause方法,新的Activity显示之后,再调用旧的Activity的onStop方法。当要返回的Activity是存在的,那么onCreate方法是不会被调用的,它会通过onRestart方法以及onStart方法从Stopped的状态转换为Started状态,再经过onResume方法成为可见状态。如下图(文档地址)所示: 下面,我们来仔细说下这段代码的含义,想一想为什么要这么写:
07-06 11:17:29.441: I/sumile(4363): MainActivity onPause
07-06 11:17:29.471: I/sumile(4363): SecondActivity OnCreate
07-06 11:17:29.471: I/sumile(4363): SecondActivity onStart
07-06 11:17:29.471: I/sumile(4363): SecondActivity onResume
07-06 11:17:29.941: I/sumile(4363): MainActivity onStop
1.为什么要先把MainActivity给onPause了,才开始打开新的Activity
答:假设在MainActivity中我们正在播放一个视频,或是播放一首歌曲,这时候来电话了,如果按照我们的想法,电话的Activity经过onCreate,onStart,onResume之后呈现在我们眼前了,我们接通了电话,正要说话,发现我们的通话有了尴尬的背景音~~所以在新的Activity开始运行之前,我们就要先把旧的给暂停掉。
2.为什么在新的Activity成功运行之后才将旧的给stop掉
答:假设我们是程序,知道要打开一个Activity了,我们不留后路的先把我们当前正在显示的一个给关掉了,然后满怀欢喜的去打开那个新的,突然,duang~新的Activity崩溃了…新的没有打开,旧的还被关闭了。
测试代码下载请看Activity初探2下面的下载地址