• Task


    Task:用户角度看到的一系列activities,默认每start一个activity产生一个instance,改变的方式有两种:两者冲突以intent中的flag为准
    1、设置<activity>中的launchMode属性:singleTop、singleTask、singleInstance的activity都需要重写onNewIntent()方法。
    singleTop:task的top的activity不能重复。
    singleTask:该activity在任意时刻都只有一个实例,并作为该task的root activity。eg:浏览器。
    singleInstance:除singleTask的特性外,该task中有且仅有该activity;被该activity启动的activity放到其他task中。
    singleTask和singleInstance的activity必须同时有<intent-filter ... >
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>,否则task没有入口恢复。
    2、设置Intent中的flag:FLAG_ACTIVITY_NEW_TASK==singleTask, FLAG_ACTIVITY_SINGLE_TOP==singleTop, FLAG_ACTIVITY_CLEAR_TOP清空back stack中该activity之上的activity。
    
    Back stack:Task中一系列activity构成的回退栈。没有到Home activity就可继续回退。
    
    Affinity亲和力:定义activity倾向于哪个task。默认在同一个app中的activity倾向于在一个task中。<activity>中的taskAffinity属性用一个唯一字符串标识亲和力(默认是app的包名),FLAG_ACTIVITY_NEW_TASK将新的activity放到有相同affinity的task中。
    每个task有一个唯一的affinity标识,默认是可launch得app包名。
    <activity>中的allowTaskReparenting="true"时,当有相同affinity的task移到前台时,activity可从启动的task移到该task。
    用途:apk中从用户角度看有多个app,可以用affinity区分不同app的activity。
    
    离开task再返回时发生的行为:默认task退到后台很长时间后,系统只保留root activity,清空其它activities。如果task中的root activity设置alwaysRetainTaskState="true"则保留所有activity;相反如果task中的root activity设置clearTaskOnLauch="true"则task返回时清空除root activity外所有其它activity;finishOnTaskLauch="true"作用于所有activity,task返回时清空该activity。
  • 相关阅读:
    HTTPD之五---HTTP协议、相关工具及状态码
    HTTPD之四----实现HTTPD正向代理与反向代理
    第十三周---DNS原理、实现智能DNS及源码编译mariadb数据库
    DNS之五----实现智能DNS
    sqoop 导入增量数据到hive
    Hadoop 二次排序
    Spark foreachpartiton和mappartition的异同
    hadoop 实现多文件输出
    spark 实现多文件输出
    Scala 中 call by name & call by value 的区别
  • 原文地址:https://www.cnblogs.com/toven/p/2641121.html
Copyright © 2020-2023  润新知