Activity和所有的生物一样,也有生老病死这一说,这就是我们将要了解的Activity生命周期的概念。
一:生命周期
Activity的生命周期如下图所示:
![activity_lifecycle.png 204839253.png](https://i-blog.csdnimg.cn/blog_migrate/0b90e603e54cf7a784e9e2932b7e4ae2.png)
Activity的生命周期分为四个阶段
(1)运行态:
应用程序启动之后,若Activity处于屏幕的最前端,可以与用户进行交互的界面,我们说其具有运行态。一个Activity从创建到运行态,需要经历onCreate-->onStart-->onResume三个阶段
(2)暂停态:
Activity被置于后台,但是用户仍然可见,失去焦点,只是暂时不能进行交互,调用onPause()进入暂停态。进入暂停态的Activity,若想重新回到运行态,需要调用onResume()方法
(3)停止态:
Activity被置于后台,完全被其他Activity挡住,失去焦点,不能交互,调用onStop()进入停止态。若想重新回到运行态,需经过onRestart()-->onStart()-->onResume()三个阶段,此时应注意实行onRestart方法之后程序进入到的是onStart而不是onCreate。也就是说:onCreate()方法,只被执行一次,onResume()无论在什么状态均需要执行,onStart()旨在创建和onestart()之后执行一次。
(4)终止态:
Activity被终止,比如点击“返回”键之后,将结束程序的执行,调用onDestory()方法,进入到终止态。若想重新回到运行态,需重新定义Activity。
二:作用
清晰的区分Activity的生命周期,在以后的编程操作中,我们可以清晰的知道哪些操作应该在哪些状态下运行。比如某功能,要求用户第一次登陆时要注册,在此登陆的时候则直接跳入,这样的功能我们应该在onCreate方法中是实现,因为onCreate在应用程序的执行中,只运行一次。
三:生命周期的调用时机
1:调用时机
这六个方法,不需要用户手动调用,由系统自动调用。然而不同的方法调用的时机却不相同。
测试方法:创建工程,在主界面中,重写六个方法,添加输出语句,执行程序,按上述几种状态,分别测试程序,看后台输出即可验证结果。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("onCreate");
}
@Override
protected void onStart() {
super.onStart();
System.out.println("onStart");
}
@Override
protected void onResume() {
super.onResume();
System.out.println("onResume");
}
@Override
protected void onRestart() {
super.onRestart();
System.out.println("onRestart");
}
@Override
protected void onPause() {
super.onPause();
System.out.println("onPause");
}
@Override
protected void onStop() {
super.onStop();
System.out.println("onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
System.out.println("onDestory");
}
}
|
测试结果:
①程Activity动,自动依次进入onCreate-->onStart-->onResume三个状态 ②按home键,Activity全被挡住,依次进入到onPause-->onStop两个状态 ③按返回键,终止程序执行,依次进入到onPause-->onStop-->onDestory状态 ④长按home键,重新执行程序,依次进入到onRestart-->onStart-->onResume三个状态 |
2: 思考
单击A页面按钮实现从页面A到页面B的跳转,此时两个Activity处于生命周期的什么状态下呢?
解决办法:
(1) 创建工程,编写自定义Act2,在Act2中添加如上代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act2);
System.out.println("2----onCreate");
}
@Override
protected void onStart() {
super.onStart();
System.out.println("2----onStart");
}
@Override
protected void onResume() {
super.onResume();
System.out.println("2----onResume");
}
@Override
protected void onRestart() {
super.onRestart();
System.out.println("2----onRestart");
}
@Override
protected void onPause() {
super.onPause();
System.out.println("2----onPause");
}
@Override
protected void onStop() {
super.onStop();
System.out.println("2----onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
System.out.println("2----onDestory");
}
|
(2)在主界面上,添加跳转的实现及其他生命周期方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("1----onCreate");
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent i = new Intent(MainActivity.this,Act2.class);
startActivity(i);
}
});
}
@Override
protected void onStart() {
super.onStart();
System.out.println("1----onStart");
}
@Override
protected void onResume() {
super.onResume();
System.out.println("1----onResume");
}
@Override
protected void onRestart() {
super.onRestart();
System.out.println("1----onRestart");
}
@Override
protected void onPause() {
super.onPause();
System.out.println("1----onPause");
}
@Override
protected void onStop() {
super.onStop();
System.out.println("1----onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
System.out.println("1----onDestory");
}
|
(3)运行工程,点击按钮,观看控制台,结果如下:
08-20 13:46:26.842: I/System.out(279): 1----onPause
08-20 13:46:26.875: I/System.out(279): 2----onCreate
08-20 13:46:26.875: I/System.out(279): 2----onStart
08-20 13:46:26.875: I/System.out(279): 2----onResume
08-20 13:46:27.212: I/System.out(279): 1----onStop
|
答案:由于此时A界面正在被B界面覆盖,所以A界面先进入到onpause状态,随后B界面启动,进入onCreate-->onStart-->onResume三个状态,之后A界面被完全挡住,A界面到达onStop状态。
Activity生命周期十分重要,要重点掌握,以后我们会经常用到的,注意产生时机与作用,注意区别哦。。![t_0016.gif](https://i-blog.csdnimg.cn/blog_migrate/1374fa44d3ec0a394c37c7d39778f1fd.gif)
转载于:https://blog.51cto.com/cinderella7/1279254