zoukankan      html  css  js  c++  java
  • 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。
  • 相关阅读:
    Linux 常用工具openssh之ssh-add
    Linux 常用工具openssh之scp
    Linux 常用工具openssh之ssh
    Linux 常用工具sysstat之sar
    Shell常用命令之sort
    Docker存储驱动之Device Mapper简介
    ceph-deploy install时,远端节点在执行apt-get update命令时失败
    Ceph osd启动报错osd init failed (36) File name too long
    rdb map出错rbd sysfs write failed
    Docker存储驱动之OverlayFS简介
  • 原文地址:https://www.cnblogs.com/toven/p/2641121.html
Copyright © 2011-2022 走看看