zoukankan      html  css  js  c++  java
  • 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开发精要》 范怀宇 著

  • 相关阅读:
    「AtCoder AGC023F」01 on Tree
    「Wallace 笔记」平面最近点对 解法汇总
    「Codeforces 1181E」A Story of One Country (Easy & Hard)
    「NOI2018」「LOJ #2720」「Luogu P4770」 你的名字
    IdentityServer4设置RefreshTokenExpiration=Sliding不生效的原因
    【知识点】IQueryable.SumAsync方法的NULL异常
    Beyond Compare 4 密钥被吊销
    【知识点】Uri对象的完整地址
    git文件夹大小写问题
    .Net Core学习资料
  • 原文地址:https://www.cnblogs.com/imap/p/4167914.html
Copyright © 2011-2022 走看看