美文网首页技术干货
Android开发艺术探索读书笔记(一)

Android开发艺术探索读书笔记(一)

作者: 小池laucherish | 来源:发表于2017-11-01 19:07 被阅读35次

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

    生命周期

    普通生命周期

    Android生命周期

    1.第一次启动:onCreate -> onStart -> onResume
    2.切换:onPause -> onStop
    若新Activity采用透明主题,则当前Activity不会回调onStop
    3.再次切回:onRestart -> onStart -> onResume
    4.back:onPause -> onStop -> onDestory

    差异:
    onCreate和onDestory只有一次调用
    onStart时Activity在后台
    onResume时Activity在前台

    Activity A 跳转到 Activity B
    A onPause -> B onCreate -> B onStart -> B onResume -> A onStop

    异常情况下的生命周期

    1.资源相关的系统配置发生改变导致Activity被杀死并重建
    销毁时:在onDestory之前调用onSaveInstanceState
    重建时:在onStart之后调用onRestoreInstanceState,并会给此方法和onCreate传递Bundle
    此过程系统会自动为我们保存和恢复一些数据,如文本框中的数据,List滚动的位置
    每一个View都有onSaveInstanceState和onRestoreInstanceState方法
    Activity保存数据 -> 委托Window保存数据 -> 委托顶级容器保存数据
    系统只在Activity异常终止的时候才会调用onSaveInstanceState和onRestoreInstanceState来保存和恢复数据
    2.资源内存不足导致低优先级的Activity被杀死

    若不想在系统配置发生改变时重建Activity,可以给configChanges添加值
    如:

    android:configChanges="orientation"
    

    Activity 的启动模式

    Activity 的 LaunchMode

    1.standrand
    标准模式
    此模式启动的Activity默认会进入启动它的Activity所属的任务栈中
    2.singleTop
    栈顶复用模式
    onNewIntent方法会被回调
    3.singleTask
    栈内复用模式
    onNewIntent方法会被回调
    结合TaskAffinity,可以指定运行的任务栈
    4.singleInstance
    单实例模式
    只能独立的存在一个任务栈中
    Tips:任务栈分为前台任务栈和后台任务栈

    Activity 的 Flags

    Activity的Flags主要包含有:FLAG_ACTIVITY_NEW_TASK、FLAG_ACTIVITY_CLEAR_TOP、 FLAG_ACTIVITY_SINGLE_TOP、FLAG_ACITIVTY_EXCLUDE_FROM_RECENTS:具有这个标记的Activity不会出现在历史Activity列表中,当某些情况下我们不希望用户通过历史列表回到我们的Activity的时候这个标记比较有用,它等同于属性设置android:excludeFromRecents="true"

    IntentFilter的匹配规则

    1.IntentFilter中的过滤信息由action、category、data,为了匹配过滤列表,需要同时匹配过滤列表中的actiion、category、data信息,否则匹配失败。一个过滤列表中的action、category、data可以有多个,所有的action、category、data分别构成不同类别,同一类别的信息共同约束当前类别的匹配过程。只有一个Inten同时匹配action类别、category类别和data类别才算完全匹配,只有完全匹配才能成功启动目标Activity。此外,一个Activity中可以有多个intent-filter,一个Intent只要能匹配任何一组intent-filter即可成功启动对应的Activity。

    <intent-filter>
        <action android:name="com.ryg.charpter_1.c" />
        <action android:name="com.ryg.charpter_1.d" />
    
        <category android:name="com.ryg.category.c" />
        <category android:name="com.ryg.category.d" />
        <category android:name="android.intent.category.DEFAULT" />
    
        <data android:mimeType="text/plain" />
    </intent-filter>
    

    2.action匹配规则:只要Intent中的action能够和过滤规则中的任何一个action相同即可匹配成功,action匹配区分大小写。
    3.category匹配规则:Intent中如果有category那么所有的category都必须和过滤规则中的其中一个category相同,如果没有category的话那么就是默认的category,即android.intent.category.DEFAULT,所以为了Activity能够接受隐式低啊用,配置多个category的时候必须加上默认的category。
    4.data匹配规则:data的结构很复杂,语法大致如下

    <data android:scheme="string"
      android:host="string"
      android:port="string"
      android:path="string"
      android:pathPattern="string"
      android:pathPrefix="string"
      android:mimeType="string"/>
    

    data由mimeType和URI组成

    相关文章

      网友评论

        本文标题:Android开发艺术探索读书笔记(一)

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