Android基础——Activity的生命周期

该文章为郭霖所著《第一行代码》第三版中第三章第四节内容的高度概括

android是使用任务(task)来管理Activity的,一个任务就是一组存放在栈里的Activity集合,这个栈也被称作返回栈(back stack)。

Activity状态

每个Activity在其生命周期最多可能有四种状态

1.运行转态

当一个Activity位于返回栈的栈顶位置,Activity就处于运行状态。(十分可靠,系统最不愿意收回的

2.暂停状态

当一个Activity不在栈顶位置,但仍然可见时,Activity就进入了暂停状态(比较可靠,只有在内存极低的情况下,系统才会考虑回收

3.停止状态

当一个Activity不再处于栈顶位置,并且处于完全不可见的时候,就进入了停止状态(不太可靠的,当其他地方需要内存时,就有可能被收回

4.销毁状态

一个Activity从返回栈中移除后就变成了销毁状态。(系统最倾向回收这种Activity,以保证系统内存充足

Activity的生存周期

Activty类中定义了7个回调方法,覆盖了Activity的生命周期的每一个环节。

onCreate(){

}
/* 在Activity第一次被调用的时候调用。在此方法中进行Activity的初始化操作,比如加载布局、绑定事件等 */
onStart(){

}
/* 这个方法在Activity由不可见变为可见的时候调用。 */ 
onResume(){

}
/* 这个方法在Activity准备好和用户进行交互的时候调用,此时该Activity一定位于栈顶,并且处于运行状态。 */
onPause(){

}
/* 这个方法在系统准备去启动或者恢复另一个Activity的时候调用。我们会在这个方法中将一个消耗CPU的资源释放掉。 */
onStop(){

}
/* 这个方法在Activity完全不可见的时候调用。与onPause的区别在于,一个不可见一个可见 */
onDestory(){

}
/* 这个方法在Activity销毁之间调用 */
onRestart(){

}
/* 这个方法由停止状态变为运行状态之前调用,也就是Activity被重新启动了 */

Activity被回收了怎么办

问题:

当一个Activity处于停止状态是有可能被系统回收的,当返回该Activity时调用的是onCreate方法而不是onRestart方法,这种情况就是重新创建了该Activity,这就会导致原本存在Activity的数据丢失。

解决:

Activity中提供了一个onSaveInstanceState()的回调方法,这个方法保证在Activity在回收之前一定会被调用,因此我们可以通过这个方法来解决问题

posted @ 2022-05-10 21:33  maplerain  阅读(51)  评论(0编辑  收藏  举报