Activity是Android的四大组件之一,是用户操作的可视化界面;它为用户提供了一个完成操作指令的窗口。当我们创建完毕Activity之后,需要调用setContentView()方法来完成界面的显示;以此来为用户提供交互的入口。在Android的APP中,只要能看见的几乎都要依托于Activity,所以Activity是在开发中使用最频繁的一种组件。因此只有了解了Activity的生命周期,才能更好的使用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:
当用户不通过退出应用的方式回到桌面时,不会执行
onDestroy()
,而是在执行完onStop()
和onSaveInstanceState()
后停止。onSaveInstanceState()
的执行是确保Activity意外销毁可以进行恢复。
如果回到应用发现Activity没有被意外销毁,则执行onRestart()
->onStart()
->onResume()
。
如果回到应用发现Activity被意外销毁,则会执行onCreate()
->onStart()
->onRestoreInstanceState()
->onResume()
。
结合上面的结果可以得到Activity的生命周期执行过程,如下图所示
Activity的生命周期.png
根据这张图,再对照着上面的场景打印的日志信息,可以更好的了解Activity的生命周期。
网友评论