Android生命周期详解

最近在看任玉刚老师的开发艺术探索,记录一下。
Android生命周期分为两部分:
一、典型情况下的生命周期。
二、异常情况下的生命周期。

一、典型情况下的生命周期

典型情况下的生命周期指在有用户参与的情况下,Activity所经过的生命周期的改变,正常情况下,Activity的常用生命周期就只有下面七个。

/*1.onCreate:
    每个Activity在写代码的过程中都会看见这个函数,
    是声明周期的第一个方法。
    一般做一些资源和数据初始化的工作,
    比如绑定相对应的资源布局setContentView*/
        @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    
    
/*2.onRestart:
    字面意思表示Activity重新启动,这个状态一般由用户切换应用的行为产生,
    比如从应用切换到桌面或者切打开新的Activity,
    此时这个Activity就会调用onPause和onStop让这个Activity进入展厅状态。
    再回到这个Activity就是onRestart了*/
        @Override
    protected void onRestart() {
        super.onRestart();
    }
    
    
/*3.onStart:
    这个状态我理解就是Activity启动中的一个过程,
    就是启动中,但是还不能与用户交互(用户不可见),
    属于一个在后台的状态*/
        @Override
    protected void onStart() {
        super.onStart();
    }
    
    
/*4.onResume:
    表示Activity已经可见,且已经开始活动。
    与onStart类似的状态但是就是属于一种在前台的状态*/
        @Override
    protected void onResume() {
        super.onResume();
    }
    
    
/*5.onPause:
    是一个非常微妙的状态,处于正在停止的一个临界点,
    就很难重现这种状态,就是在停止过程中,
    先执行onPause然后在onStop执行之前,
    回到Activity执行onResume,这期间就是onPause的状态。
    此处可以做一些存储数据停止动画的工作,但是不能太耗时,
    不然会影响到新Activity的显示,只有这些操作做完,
    新Activity的OnResume才会执行。*/
        @Override
    protected void onPause() {
        super.onPause();
    }
    
    
/*6.onStop:
    表示Activity即将停止,可以做一些相对重量级的回收工作,
    同样不能太耗时。*/
    @Override
    protected void onStop() {
        super.onStop();
    }

/*onDestroy
    表示Activity即将被销毁,这是Activity生命的尽头,
    可以做一些回收工作和资源的释放。*/
    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

activity生命周期的切换过程
1、onStart 和 onResume、onPause 和 onStop 从描述上看差不多,对我们来说有什么实质的不同呢?
   从实际使用过程中来说,onStart 和 onResume、onPause 和 onStop看起来的确差不多,甚至我们可以只保留一对,比如只保留 onState 和 onStop。既然如此,那为什么 Android系统还要提供看起来重复的接口呢?根据上面的分析,我们知道,这两个配对的回调分别表示不同意义,onState 和onStop 是从 Activity 是否可见这个角度来回调的,而 onResume 和 onPause 是从 Activity 是否位于前台这个角度来回调的,除了这种区别,在实际使用中没有其他明显区别。

2.假设当前Activity为A,如果这时用户打开了一个新的活动B,那么B的onResume和A的onPause谁先执行呢?
   我们可以从Android源码里得到解释,A的onPause执行后B的onResume才会被调用。从另一个角度来说Android的官方文档中对onPause有这样一句解释:不能在onPause里进行重量级操作,因为必须在onPause执行过后,新的Activity才能Resume。

二、异常情况下的生命周期

   onSaveInstanceState方法只会出现在 Activity被异常终止的情况下,它的调用时机是在 onStop之前,它和onPause方法没有既定的时序关系,可能在它之前,也可能在它之后。当 Activity被重新创建的时候, onRestoreInstanceState会被回调,它的调用时机是 onStart之后。系统只会在 Activity即将被销毁并且有机会重新显示的情况下才会去调用 onSaveInstanceState方法。当 Activity在异常情况下需要重新创建时,系统会默认为我们保存当前 Activity的视图结构,并且在 Activity重启后为我们恢复这些数据,比如文本框中用户输入的数据、listview滚动的位置等,这些 view相关的状态系统都会默认为我们恢复。具体针对某一个 view系统能为我们恢复哪些数据可以查看 view的源码中的onSaveInstanceState和 onRestoreInstanceState方法。
   关于保存和恢复 View 的层次结构,系统工作流程是: Activity 异常终止, Activity 调用 onSaveInstanceState 去保存数据,然后 Activity 会委托 Windows 去保存数据,接着 Window 再委托它上面的顶层容器去保存数据。顶层容器是一个 ViewGroup ,一般来说它很可能是 DectorView ,最后顶层容器再去通知它的子元素保存数据。(这是一种委托思想,上层委托下层,父容器委托子元素去处理事情,如 View 的绘制过程,事件分发都是采用类似的思想)

  • 5
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
中的执行顺序是怎样的? 回答: 在Android中,一个runloop中的Activity生命周期的执行顺序是按照以下步骤进行的:onCreate -> onStart -> onResume -> onPause -> onStop -> onDestroy。\[3\]在正常情况下,一个Activity会经历这七个生命周期。首先,在Activity第一次被运行时会调用onCreate方法,用于进行一些初始化工作。然后,当Activity被重新启动时会调用onRestart方法。接下来,Activity正在被启动时会调用onStart方法,表示Activity正在从不可见到可见状态的转变。然后,当Activity变为可见状态并出现在前台工作时,会调用onResume方法。当Activity正在暂停但依然可见时,会调用onPause方法。当Activity即将暂停并工作在后台时,会调用onStop方法。最后,当Activity即将被销毁时,会调用onDestroy方法。\[3\]这是一个正常情况下的生命周期顺序。在异常情况下,比如系统配置发生改变导致Activity被杀死并重新创建,会先调用onPause方法,然后调用onSaveInstanceState方法保存数据,接着重新创建Activity并调用onRestoreInstanceState方法恢复之前的数据。\[1\]总的来说,Android的Activity生命周期的执行顺序是按照一定的规律进行的,确保了Activity的正常运行和用户体验。 #### 引用[.reference_title] - *1* *3* [Android——Activity的生命周期](https://blog.csdn.net/News53231323/article/details/113917191)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Android生命周期详解](https://blog.csdn.net/qq_43094133/article/details/107686933)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值