第一章 Activity的生命周期和启动模式

来源:互联网 发布:网络麻将换牌软件赌博 编辑:程序博客网 时间:2024/05/22 14:10

Activity翻译成活动,其实翻译成界面更好,更容易理解。 


一、Activity的生命周期全面分析


Activity的生命周期分为两部分
  1. 典型情况下的生命周期:有用户参与的情况下,Activity所经过的生命周期的变化。
  2. 异常情况下的生命周期:Activity被系统收回或者由于当前设备的Configuration发生改变从而导致Activity被销毁重建。

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

1、在正常情况下,Activity会经历如下生命周期:onCreate() onRestart() onStart() onResume() onPause() onStop() onDestory().

  • onCreate() onDestory()是配对的标志着Activity的创建于销毁,并且只可能有一次调用。
  • onStart() onStop() 就Activity是否可见来说,是配对的。
  • onResume() onPause() 就Activity是否在前台来说,是配对的。

2、假设当前Activity为A,如果这时候用户打开了一个新的Activity B,那么B的onResume() 和A 的onPause()哪个先执行呢。

答:我们可以从源码进行分析(感兴趣的可以去查看源码),下面我们直观的分析:onResume() onPause() 就Activity是否在前台这个角度进行回调的,前台的屏幕如果被活动A全部占有,在A不退出前台的情况下,B是没有空间显示的,所以只有AonPause()之后B 才能onResume().

Android官方文档对onPause的解释:不能在onPause中做重量级的操作,因为必须onPause执行完成以后新的Activity才能Resume。

onPause和onStop都不能执行耗时的操作,尤其onPause。我们应当尽量在onStop中做操作,从而使得新的Activity尽快显示出来并切换到前台。

三、异常情况下的生命周期分析

1、资源相关的系统配置发生改变导致Activity被杀死并重新创建

当系统配置发生改变后(横屏手机和竖屏手机拿到两张不同的图片,突然旋转屏幕的时候),Activity会被销毁,其onPause onStop onDestory 均会被调用,同时由于Activity是在异常情况下终止的,系统会调用onSaveInstanceState(在异常情况下终止,才会调用这个方法,正常情况下不会)来保存当前Activity的状态,调用时机在onStop之前。onSaveInstanceState保存的思想是一种典型的委托思想。

当Activity被重新创建后,系统会调用onRestoreInstanceState,并且把Activity销毁时onSaveInstanceState 方法所保存的Bundle对象作为参数传递给onRestoreInstanceState和onCreate方法。onRestoreInstanceState和onCreate的区别就是onRestoreInstanceState一旦被调用,Bundle对象实例一定有值,我们不用额外判断是否为空。onCreate中,如果正常启动,Bundle对象实例为null,所以需要额外判断。官方推荐使用onRestoreInstanceState来进行数据恢复。

onRestoreInstanceStateonSaveInstanceState 方法中,系统自动为我们做一定的恢复工作。比如帮我们恢复文本框中用户输入的数据等。

2、资源内存不足导致低优先级的Activity被杀死。

当系统配置发生改变后,如何才能使Activity不被重新创建?

Activity指定configChanges属性。

<activity android:configChanges="orientation|screenSize" />

0 0
原创粉丝点击