Application\Activity\Fragment ,生

作者: alphet | 来源:发表于2019-03-01 17:54 被阅读7次
    一、Activity生命周期变化
    

    贴一张官方的示意图:


    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
    ···

    相关文章

      网友评论

        本文标题:Application\Activity\Fragment ,生

        本文链接:https://www.haomeiwen.com/subject/fkmduqtx.html