• android核心系列--2,关于任务栈(task)


    一,任务

    任务是由界面组件组成的一个栈,这些界面组件可以来自多个进程,多个应用,为共同完成一项任务而存在,比如写邮件时会用到邮件应用和联系人应用中的界面组件,这些界面组件在同一个任务中运行。

    二,界面组件的运行模式

    1,standard   标准模式,每次调用界面组件都会生成一个新的实例压入任务栈的栈顶。

    2,singleTop ,对应 Activity_FLAG_ACTIVITY_SINGLE_TOP,如果当前界面组件在栈顶,则再次调用该界面组件时不会生成新的实例,而是直接使用栈顶的界面组件,通过 onNewIntent方法将 Intent对象传给界面组件。 但是如果界面组件不在栈顶,则会在栈顶生成新的实例。

    3,singleTask 和 singleInstance,当调用这种运行模式的界面组件时,会启动一个新的任务(如果还没启动的话),将该界面组件放入栈底。如果再次调用该界面组件,则会将该界面组件上方清空,再次复用该界面组件。

    singleInstance有一点不同,就是新任务中有且只有这一个界面组件,而singleTask则是在新任务中会有多个其它的界面组件。

    使用singleTask还需注意:如果界面组件同时设置了任务粘度属性,android:taskAffinity属性,那么该界面组件就不一定必须是根组件了,如果指定的任务已经存在,它会直接跳到指定的任务中去。

    三,任务粘度  android:taskAffinity 属性

    表明这个界面组件想在哪个任务中运行,单独设置该属性没用,需要再设置下面的其中一项:

    1,设置 android:allowTaskReparenting = "true"

    2,通过设置Activity.FLAG_ACTIVITY_NEW_TASK标记。

    四,实例:

    1,安卓原生应用:浏览器应用

    其界面组件 BrowserActivity 配置成了 singleTask ,同时设置了 android:alwaysRetainTaskState = "true",该设置表示总是维护任务状态。

    2,联系人应用:

    通过 android:taskAffinity 将联系人管理,来电管理相关的界面组件分别放在不同的任务中。

    参考:

    《android开发精要》 范怀宇 著

  • 相关阅读:
    js-----面向对象=====>工厂模式/构造函数/原型模式
    MarkDown语法
    Vue 基础篇
    CSS 预处理语言之 less 篇
    Git常用命令
    与 JSON 相关的一些操作 (项目中用到一部分,后续逐渐完善)
    [转] -- html5手机网站自适应需要加的meta标签
    [转] -- 最全前端资源汇集
    json和jsonp的区别,ajax和jsonp的区别
    对象
  • 原文地址:https://www.cnblogs.com/imap/p/4167914.html
Copyright © 2020-2023  润新知