继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Application\Activity\Fragment ,生命周期

慕村9548890
关注TA
已关注
手记 1102
粉丝 227
获赞 987
一、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


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP