Android开发艺术探索读书笔记(一):Android的生命周期与启动模式

时间:2022-09-24 17:44:18
  1. 当用户打开新的Activity或者回到桌面时,原来的Activity回调如下:onPuse-> onStop,但是如果原来的Acitivity采用了透明的主题,那么当前的Activity不会执行onStop。

  2. 从Activity A跳转到Activity B时,会先执行A的onPause,然后再执行B的onCreate,onStart,onResume,最后才执行A的onDestory。

  3. Activity的异常生命周期有两种情况:
    * 资源相关配置发生改变导致Activivty被杀死被重新创建;
    * 资源内存不足导致低优先级的Activity被杀死;

    Activity在异常情况下终止,系统会调用onSaveInstaceState来保存当前Activity的状态。当该Activity被重新创建后,系统会调用onRestoreInstaceState,把onSaveInstaceState方法所保存的Bundle作为参数传递到onRestoreInstaceState和onCreate中,再将数据取出进行恢复。(比如文本框用户输入的数据,ListView滚动的位置)。

    onRestoreInstaceState一旦被调用Bundle肯定是有值的,我们不用额外去判断是否为空,而onCreate不行。系统只在Activity异常终止时调用onSaveInstaceState和onRestoreInstaceState这两个方法。

  4. 在minSdkVersion和targetVersision有一个大于13时,为了防止旋转屏幕时Activity重启,“android:configChanges=orientation| screenSize”。

  5. Activity的启动模式

    a) standard( 标准模式 ):每次启动一个Activity都会重新创建一个新的实例,不管这个实例是否存在,并且它会进入启动者所在的栈中。

    b) singleTop(栈顶复用模式): 如果新的Activity已经位于所在任务栈的顶部,则此Activity不会被重新创建 ,若已存在但不在栈顶,则仍然会重新创建;

    c) singleTask(栈内复用模式): 只要Activity在一个栈已经存在,那么多次启动此Activity都不会重新创建实例。

    d)singleInstance(单实例模式): 这是一种加强的singleTask模式,当该Activity启动后,系统会为该Acitivty创建一个新的栈,然后改Acitivty会独立地在这个栈内,但由于栈内复用特性,后续的请求均不会创建新的栈,除非这个独立的栈被系统销毁。
  6. Intent的匹配规则

    action匹配规则:要求intent中的action 存在 且 必须和过滤规则中的其中一个相同 区分大小写;

    category匹配规则:系统会默认加上一个android.intent.category.DEAFAULT,所以intent中可以不存在category,但如果存在就必须匹配其中一个;

    data匹配规则:data由两部分组成,mimeType和URI,要求和action相似。如果过滤规则中定义了data,那么Intent必须也要定义可匹配的data。 如果没有指定URI,URI但默认值为content和file(schema);