• 任务栈的描述


    1.启动任务栈
       第一种,动作设置为“android.intent.action.MAIN”,类别设置为“android.intent.category.LAUNCHER”,
    可以使这个ACT(activity)实例称为一个任务栈的入口,拥有这种类型的intent-filter的ACT类型的图
    表和名字也会显示在application launcher中。
       第二种,即是采用用“singleInstance”模式,另外开个一个唯一ACT的栈.

     第三种, 在Intent中加入了“FLAG_ACTIVITY_NEW_TASK”。

      当传递给startActivity()的Intent对象包含FLAG_ACTIVITY_NEW_TASK标记时,系统会为需要启动的activity寻找与当前activity不同的task。如果要启动的activity的affinity属性与当前所有的task的affinity属性都不相同,系统会新建一个带那个affinity属性的task,并将要启动的activity压到新建的task栈中;否则将activity压入那个affinity属性相同的栈中。

    提示:如果“singleInstance”模式同时还加上上面的类型,则当前ACT也是一个单独ACT的任务栈,而应用其他ACT会组成另外一个任务栈

     

    2.启动模式
    <activity>标签的launchMode属性可以设置为四种不同的模式:
    “standard”   :(默认模式)反复创建新实例,如A-B-A-C-D-B-A…依次随便加
    “singleTop” : 避免出现类似A-B-C-D-D…,如D采用"singleTop",则是A-B-C-D 
    “singleTask”:    如A采用"singleTask",则在“standard”中类似A-B-C-D-A任务栈,在“singleTask”只会剩下A,BCD都会被回收
    “singleInstance” :  此模式你另外开个一个任务栈,且单独只有一个ACT.主要用于多个应用共享同一个activity。

    提示:如果该Activity已经启动了,再次调用该activity就调用OnNewIntent。

    3.清理任务栈
    默认:如果一个任务栈在很长的一段时间都被用户保持在后台的,那么系统就会将这个任务栈中除了根ACT以外的
    其它所有ACT全部清除掉。当用户再将任务栈切换到前台,则只能显示根activity了。
        1)alwaysRetainTaskState属性
        如果将根ACT的alwaysRetainTaskState属性设置为“true”,则即便一个任务栈在很长的一段时间都被用户
    保持在后台的,系统也不会对这个任务栈进行清理。
        2)clearTaskOnLaunch属性
        如果将根ACT的clearTaskOnLaunch属性设置为“true”,那么只有这个任务栈切换到了后台,那么系统就会
    将这个任务栈中除了根ACT以外的其它所有ACT全部清除掉。即和alwaysRetainTaskState的行为完全相反。
        3) finishOnTaskLaunch属性
        这个属性的行为类似于clearTaskOnLaunch,但是此属性作用于单个的ACT对象,而不是整个任务栈。当这个
    任务栈切换到了后台,这个属性可以使任务栈清理包括根ACT在内的任何ACT对象。 

    4.还复杂点可以加入亲属关系taskAffinity


    总结:简单的说,即是开一个(或几个)任务栈,在每个任务栈上添加ACT,遇到“singleTask”的则回到之前存在的ACT,把夹在中间的ACT全部回收

  • 相关阅读:
    javaee后台适合用的编辑器插件
    昨天做了一个使用javamail发送文件的demo
    jsp页面可以巧用模态框
    jQuery 表单验证插件——Validation(基础)
    jsp引入struts标签,引入自己写的jquery需要注意的问题
    LeetCode的神坑
    Java函数结束时的内存回收坑
    递归与回溯1
    由树的定义和递归想到的
    复杂一点的二叉树递归
  • 原文地址:https://www.cnblogs.com/xitang/p/2195997.html
Copyright © 2020-2023  润新知