为了账号安全,请及时绑定邮箱和手机立即绑定

Application\Activity\Fragment ,生命周期

标签:
Android
一、Activity生命周期变化

贴一张官方的示意图:


webp

activity_lifecycle.png

关于Activity生命周期一般的应用场景,包括以下2种方式。

第一种情况,常规启动、退出Activity,生命周期如下:

启动Activity ->
onCreate ->
onStart ->
onResume ->
onPause ->
onStop->
onDestroy(Activity被销毁)

第二种情况,启动Activity,点击Home键,然后回到Activity
,最后销毁Activity,生命周期如下:
启动Activity ->
onCreate ->
onStart ->
onResume ->
onPause ->
onStop->
onRestart ->
onStart ->
onResume ->
onPause ->
onStop->
onDestroy(Activity被销毁)

我们今天讨论下(Bundle savedInstanceState)与生命周期之间的关系

1、onCreate(Bundle savedInstanceState)
savedInstanceState可能为空

2、onSaveInstanceState(Bundle outState)
onSaveInstanceState,Activity有可能被销毁的时候,我理解的是,当前手机页面被其他activity取代,或者其他app取代,系统会调用这个方法。比如说,点击Home键、电源键,从菜单列表选择其他app;另外,横竖屏切换。
过程为:
onPause->
onSaveInstanceState ->
onStop

   手动调用finish()或者点击手机返回键,不会促发onSaveInstanceState

3、onRestoreInstanState(Bundle savedInstanceState)
有2个Activity:A和B,A Intent to B之后,从B返回A,系统判断A已经被回收,那么必然会启动onRestoreInstanState。
过程:
onCreate ->
onStart  ->
onRestoreInstanState ->
onResume

可以看出来,如果有onRestoreInstanState,那么必然有savedInstanceState;如果有savedInstanceState,onRestoreInstanState则不一定存在;
事实上,我的手机使用状态,大多数都只触发savedInstanceState,

那么,如果Activity被系统回收,重新打开,我们可以在onCreate 或者
onRestoreInstanceState,里面获取关键变量的值,它们的区别就是
后者bundle必然不为空,前者可能为空。

二、Fragment生命周期变化

打开一个带有,Fragment的Activity,
过程:
OnAttach ->
OnCreate ->
OnCreateView ->
OnViewCreated ->
OnActivityCreated ->
OnStart ->
OnResume ->
如果隐藏当前Fragment,进入OnHidden

三、Application生命周期变化

下面的日志是,当app切换到后台之后,被系统回收,然后我们再打开app
,整个Application、Activity、Fragment的创建流程
···
2019-03-01 15:02:17.533 :  Application// attachBaseContext
2019-03-01 15:02:17.685 :  Application// onCreate
2019-03-01 15:02:19.019 :  Application// onActivityCreated = A1
2019-03-01 15:02:19.727 :  Application// onActivityStarted = A1
2019-03-01 15:02:19.930 : Application// onActivityResumed = A1
2019-03-01 15:02:21.463 :  fragment// onAttach
2019-03-01 15:02:21.463 :  fragment// onCreate
2019-03-01 15:02:21.567 :  fragment// onCreateView
2019-03-01 15:02:21.958 :  fragment// onViewCreated
2019-03-01 15:02:21.959 :  fragment// onActivityCreated
2019-03-01 15:02:21.959 :  fragment// onStart
2019-03-01 15:02:21.970 :  fragment// onResume

// 被回收后,重新打开
2019-03-01 15:25:24.046: Application// attachBaseContext
2019-03-01 15:25:24.150: Application// onCreate
2019-03-01 15:25:25.513: Application// onActivityCreated = A1
2019-03-01 15:25:26.209: Application// onActivityStarted = A1
2019-03-01 15:25:26.651: Application// onRestoreInstanceState
2019-03-01 15:25:26.662: Application// onActivityResumed = A1
2019-03-01 15:25:26.671:  fragment// onAttach
2019-03-01 15:25:26.671:  fragment// onCreate
2019-03-01 15:25:26.850:  fragment// onCreateView
2019-03-01 15:25:27.394:  fragment// onViewCreated
2019-03-01 15:25:27.395:  fragment// onActivityCreated
2019-03-01 15:25:27.395:  fragment// onStart
2019-03-01 15:25:27.418:  fragment// onResume



作者:alphet
链接:https://www.jianshu.com/p/e7cb926b311b


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消