Android activity的生命周期
activity类处于android.app包中,继承体系如下:
1.java.lang.Object
2.android.content.Context
3.android.app.ApplicationContext
4.android.app.Activity
(1)onCreate:表示Activity正在被创建,适合做一些初始化工作。实际应用中一般会初始化成员变量和加载布局资源。
(2)onRestrat:表示Activity正在被重新启动。一般是从不可见重新变为可见状态是调用。
(3)onStart:表示Activity正在被启动,即将开始,此时已经可见,但仍旧在后台,无法与用户交互,虽可见,但是我们还看不到。
(4)onResume:表示Activity已经可见了。此时Activity显示到前台。
(5)onPause:表示Activity正在停止,此时可以做一些存储数据、停止动画等操作,但不宜太耗时。因为此方法执行完,新的Activity的onResume才会执行。
(6)onStop:表示Activity即将停止,此时可以做一些回收工作,同样不能太耗时。
(7)onDestroy:表示Activity即将被销毁,此时可以做一些资源释放。
MainActivity的启动,退出
// MainActivity的启动
2022-04-20 16:46:50.493 11861-11861/com.hnucm.myapplication I/MainActivityLog: onCreate:
2022-04-20 16:46:50.497 11861-11861/com.hnucm.myapplication I/MainActivityLog: onStart:
2022-04-20 16:46:50.498 11861-11861/com.hnucm.myapplication I/MainActivityLog: onResume:
// MainActivity的退出
2022-04-20 16:46:57.099 11861-11861/com.hnucm.myapplication I/MainActivityLog: onPause:
2022-04-20 16:46:57.700 11861-11861/com.hnucm.myapplication I/MainActivityLog: onStop:
2022-04-20 16:46:57.701 11861-11861/com.hnucm.myapplication I/MainActivityLog: onDestroy:
正常情况下,Activity的生命周期为
onCreate()
->onStart()
->onResume()
->onPause()
->onStop()
->onDestroy()
启动后转动屏幕
// MainActivity的启动
2022-04-20 16:46:50.493 11861-11861/com.hnucm.myapplication I/MainActivityLog: onCreate:
2022-04-20 16:46:50.497 11861-11861/com.hnucm.myapplication I/MainActivityLog: onStart:
2022-04-20 16:46:50.498 11861-11861/com.hnucm.myapplication I/MainActivityLog: onResume:
// 默认情况旋转屏幕
2022-04-20 16:52:35.645 12203-12203/com.hnucm.myapplication I/MainActivityLog: onPause:
2022-04-20 16:52:35.649 12203-12203/com.hnucm.myapplication I/MainActivityLog: onStop:
2022-04-20 16:52:35.649 12203-12203/com.hnucm.myapplication I/MainActivityLog: onSaveInstanceState:
2022-04-20 16:52:35.650 12203-12203/com.hnucm.myapplication I/MainActivityLog: onDestroy:
2022-04-20 16:52:35.695 12203-12203/com.hnucm.myapplication I/MainActivityLog: onCreate:
2022-04-20 16:52:35.700 12203-12203/com.hnucm.myapplication I/MainActivityLog: onStart:
2022-04-20 16:52:35.701 12203-12203/com.hnucm.myapplication I/MainActivityLog: onRestoreInstanceState:
2022-04-20 16:52:35.701 12203-12203/com.hnucm.myapplication I/MainActivityLog: onResume:
默认情况下旋转屏幕会触发重新绘图,所以APP会销毁这个Activity,并根据屏幕重新绘制Activity。
Android为我们提供了onSaveInstanceState()
和onRestoreInstanceState()
这两个方法,可以保证Activity在意外销毁时存储数据和恢复数据。旋转屏幕导致的Activity销毁属于意外销毁。
根据多次测试得出onSaveInstanceState()
运行在onStop()
之后,onRestoreInstanceState()
运行在onStart()
之后。
在点击按钮后跳转自己,启动模式singleTop
// MainActivity的启动
2022-04-20 16:46:50.493 11861-11861/com.hnucm.myapplication I/MainActivityLog: onCreate:
2022-04-20 16:46:50.497 11861-11861/com.hnucm.myapplication I/MainActivityLog: onStart:
2022-04-20 16:46:50.498 11861-11861/com.hnucm.myapplication I/MainActivityLog: onResume:
// 点击按钮跳转
2022-04-20 17:02:49.520 12832-12832/com.hnucm.myapplication I/MainActivityLog: onPause:
2022-04-20 17:02:49.520 12832-12832/com.hnucm.myapplication I/MainActivityLog: onNewIntent:
2022-04-20 17:02:49.520 12832-12832/com.hnucm.myapplication I/MainActivityLog: onResume:
当
MainActivity
的启动模式为SingleTop
时,通过MainActivity
布局内的按钮跳转到MainActivity
时,不会创建一个新的MainActivity
,而是在执行onPause()
后通过onNewIntent()
重新执行onResume()
。
有关启动模式的介绍,点击此处
点击HOME键,返回到桌面,再点击回到应用
// MainActivity的启动
2022-04-20 16:46:50.493 11861-11861/com.hnucm.myapplication I/MainActivityLog: onCreate:
2022-04-20 16:46:50.497 11861-11861/com.hnucm.myapplication I/MainActivityLog: onStart:
2022-04-20 16:46:50.498 11861-11861/com.hnucm.myapplication I/MainActivityLog: onResume:
// 应用退到后台
2022-04-20 17:06:37.296 12832-12832/com.hnucm.myapplication I/MainActivityLog: onPause:
2022-04-20 17:06:38.102 12832-12832/com.hnucm.myapplication I/MainActivityLog: onStop:
2022-04-20 17:06:38.103 12832-12832/com.hnucm.myapplication I/MainActivityLog: onSaveInstanceState:
// 回到应用
2022-04-20 17:07:24.601 12832-12832/com.hnucm.myapplication I/MainActivityLog: onRestart:
2022-04-20 17:07:24.602 12832-12832/com.hnucm.myapplication I/MainActivityLog: onStart:
2022-04-20 17:07:24.602 12832-12832/com.hnucm.myapplication I/MainActivityLog: onResume: