Android中Task任务栈的四种模式

Activity四种启动模式与任务栈(Task)总结分析        最近在总结android基础问题 比如Activity的四种启动模式  其中有涉及到任务栈的问题   之前都是一知半解   现在想着用笔记录下来  可供自己以后参考 android任务栈简单了解 1. android任务栈又称为Task,它是一个栈结构,具有后进先出的特性,用于存放我们的Activity组件。2. 我们每次打开一个新的Activity或者退出当前Activity都... 阅读详情

首先我们来看下Task的定义,Google是这样定义Task的:a task is what the user experiences as an “application.” It’s a group of related activities, arranged in a stack. A task is a stack of activities, not a class or an element in the manifest file. 这意思就是说Task实际上是一个Activity栈,通常用户感受的一个Application就是一个Task。从这个定义来看,Task跟Service或者其他Components是没有任何联系的,它只是针对Activity而言的。
Activity有不同的启动模式, 可以影响到task的分配
Task,简单的说,就是一组以栈的模式聚集在一起的Activity组件集合。它们有潜在的前后驱动关联,新加入的Activity组件,位于栈顶,并仅有在栈顶的Activity,才会有机会与用户进行交互。而当栈顶的Activity完成使命退出的时候,Task会将其退栈,并让下一个将跑到栈顶的Activity来于用户面对面,直至栈中再无更多Activity,Task结束。
这里写图片描述

如上表所示,是一个实例。从用户从进入邮箱开始,到回复完成,退出应用整个过程的Task栈变化。这是一个标准的栈模式,对于大部分的状况,这样的Task模型,足以应付,但是,涉及到实际的性能、开销等问题,就会变得残酷许多。

比如,启动一个浏览器,在Android中是一个比较沉重的过程,它需要做很多初始化的工作,并且会有不小的内存开销。但与此同时,用浏览器打开一些内容,又是一般应用都会有的一个需求。设想一下,如果同时有十个运行着的应用(就会对应着是多个Task),都需要启动浏览器,这将是一个多么残酷的场面,十个Task栈都堆积着很雷同的浏览器Activity,
是多么华丽的一种浪费啊。
于是你会有这样一种设想,浏览器Activity,可不可以作为一个单独的Task而存在,不管是来自那个Task的请求,浏览器的Task,都不会归并过去。这样,虽然浏览器Activity本身需要维系的状态更多了,但整体的开销将大大的减少,这种舍小家为大家的行为,还是很值得歌颂的
standard”, “singleTop”, “singleTask”, “singleInstance”。

standard模式, 是默认的也是标准的Task模式,在没有其他因素的影响下,使用此模式的Activity,会构造一个Activity的实例,加入到调用者的Task栈中去,对于使用频度一般开销一般什么都一般的Activity而言,standard模式无疑是最合适的,因为它逻辑简单条理清晰,所以是默认的选择。

而singleTop模式,基本上于standard一致,仅在请求的Activity正好位于栈顶时,有所区别。此时,配置成singleTop的Activity,不再会构造新的实例加入到Task栈中,而是将新来的Intent发送到栈顶Activity中,栈顶的Activity可以通过重载onNewIntent来处理新的Intent(当然,也可以无视…)。这个模式,降低了位于栈顶时的一些重复开销,更避免了一些奇异的行为(想象一下,如果在栈顶连续几个都是同样的Activity,再一级级退出的时候,这是怎么样的用户体验…),很适合一些会有更新的列表Activity展示。一个活生生的实例是,在Android默认提供的应用中,浏览器(Browser)的书签Activity(BrowserBookmarkPage),就用的是singleTop。

singleTask,和singleInstance,则都采取的另辟Task的蹊径。
标志为singleTask的Activity,最多仅有一个实例存在,并且,位于以它为根的Task中。所有对该Activity的请求,都会跳到该Activity的Task中展开进行。singleTask,很象概念中的单件模式,所有的修改都是基于一个实例,这通常用在构造成本很大,但切换成本较小的Activity中。最典型的例子,还是浏览器应用的主Activity(名为Browser…),它是展示当前tab,当前页面内容的窗口。它的构造成本大,但页面的切换还是较快的,于singleTask相配,还是挺天作之合的。

singleInstance显得更为极端一些。在大部分时候singleInstance与singleTask完全一致,唯一的不同在于,singleInstance的Activity,是它所在栈中仅有的一个Activity,如果涉及到的其他Activity,都移交到其他Task中进行。这使得singleInstance的Activity,像一座孤岛,彻底的黑盒,它不关注请求来自何方,也不计较后续由谁执行。在Android默认的各个应用中,很少有这样的Activity,在我个人的工程实践中,曾尝试在有道词典的快速取词Activity中采用过,
是因为我觉得快速取词入口足够方便(从notification中点选进入),并且会在各个场合使用,应该做得完全独立。

大的apk 拆成 很多小的apk
●Activity的android:affinity属性
1.配置后 当启动这个activity时就先去找有没有activity的亲和力属性相同 有就加入这个
activity所在的任务中没有就新开任务
2.affinity起作用需要的条件而者具备一个:
1.intent包含FLAG_ACTIVITY_NEW_TASK标记
2.activity元素启用了allowTaskReparenting属性.

Android异步任务(AsyncTask)的实现原理与编程 在Android开发中,异步任务(AsyncTask)是一种常用的机制,用于在后台执行耗时操作,并在主线程更新UI。在上面的示例中,我们定义了一个名为MyTask的异步任务,继承自AsyncTask类。如果需要取消任务,可以在合适的时机调用cancel方法,并在doInBackground方法中进行相应的处理。该方法运行在子线程中,并且不能直接操作UI。除了这三个关键方法外,AsyncTask还提供了其他几个方法,例如onProgressUpdate和onCancelled,用于进度更新和任务取消的处理。 阅读详情

相关推荐

Android最全最简单的异步任务AsyncTask使用解析

Android最全最简单的异步任务AsyncTask使用解析.一步到位彻底理解异步任务。

Android面试-LaunchMode及Task工作模式(扔物线笔记)

切到后台时看到的是任务列表,会列出已存在的Task任务,Activity存活在任务栈中。 一、Activity的LaunchMode有四种: standard (默认),每次都新建一个Activity(在当前App的Task) singleTop,当此Activity在栈顶时就不新建,不在栈定就新建(在当前App的Task) singleTask 全局单例,保证只在一个task的栈里有一个实例。 singleInstance 独占,在单独的Task里,栈里只有这一个activity。 二、单独讲讲跨Ta

czssltt的博客 931

深度可分离卷积(DepthwiseSeparableConvolution):Depthwise卷积与Pointwise卷积

深度可分离卷积不用多说,在轻量级网络架构方面是一个绕不开的话题,只要接触深度学习多多少少会接触。深度可分离卷积即DepthwiseSeparableConvolution,该卷积将一个常规卷积过程划分成两个完成Depthwise卷积和Pointwise卷积,在保证输出一样时,计算量大大降低。首先来看,一个常规卷积是怎么实现的。其示意图如果我们从通道数变换的角度来看,卷积就是将3通道的tensor变为了4通道的tensor,我们来看看深度可分离卷积是怎么实现通道的变化的。...

xu.hyj 1万+

详解android中的任务(Task)和栈(Stack)

这两天做推送,下午看了一下午的文档,有写了一下demo,现在做下总结,以免下次又忘了。应该说推送本身是比较简单的,用的是jpush。问题在于接收到推送以后,单击通知栏中推送项目后的跳转问题。嗯,,需求是当浏览完广告页时,按back键要求返回程序栈,当然如果程序此时未启动,则需要启动程序。同样,如果程序正在前台运行则不做任何处理。这里的程序指的就是我们的项目。        这个看来的慢慢说了,应

It's just a matter of time. 3131

CTF-Web学习笔记:服务端请求伪造(SSRF)篇

本文系统介绍了CTF比赛中SSRF漏洞的攻防技术。首先解析了SSRF的核心原理,即利用服务器对用户输入URL的未校验缺陷,诱导其访问内网资源。然后详细分析了5类常见CTF题型:文件读取、内网探测、云服务元数据窃取、协议绕过及组合漏洞利用。重点讲解了绕过URL过滤、利用特殊协议(如dict://、gopher://)等实战技巧,并通过一道SSRF+Redis的高阶题目演示完整攻击链。最后给出防御建议:严格校验输入URL、禁用危险协议、实施内网隔离等。

Deng7326的博客 1704

5G MBS(组播广播服务)深度解析:从标准架构到商用实践

5G MBS(组播广播服务)深度解析:从标准架构到商用实践

大家好,我是码农老gou,一名专注于编程技术的程序员。在这个博客中,我将与大家分享我在工作和学习中的经验、见解以及一些实用的技术干货。 1081

Android 之 AsyncTask 异步任务

答:先要了解这几个名称:应用程序,进程,线程,多线程!!应用程序(Application):为了完成特定任务,用某种语言编写的一组指令集合(一组静态代码)进程(Process)运行中的程序,系统调度与资源分配的一个独立单位,操作系统会为每个进程分配 一段内存空间,程序的依次动态执行,经理代码加载 -> 执行 -> 执行完毕的完整过程!线程(Thread):比进程更小的执行单元,每个进程可能有多条线程,线程需要放在一个进程中才能执行!线程是由程序负责管理的!!!而进程则是由系统进行调度的!!!

leyang0910的博客 1384

特斯拉Model 3 BMS主控板拆解:从硬件设计到热管理策略的实战解析

本文深度拆解特斯拉Model 3的BMS主控板,解析其硬件架构与热管理协同策略。文章聚焦于主控板的分区布局、双核MCU的智慧分工,以及从被动监控到主动干预的热管理范式转变,揭示了特斯拉在高压安全、实时控制与系统级工程思维上的设计哲学。

zz67890的博客 594

Android Stack与Task

Stack: Activity承担了大量的显示和交互工作,从某种角度上将,我们看见的应用程序就是许多个Activity的组合。 为了让这许多Activity协同工作而不至于产生混乱,Android平台设计了ActivityStack机制用于管理Activity,其遵循先进后出的原则,系统总是显示位于栈顶的Activity,从逻辑上将,位于栈顶的Activity也就是最后打开的Activity, 这...

xdy1120的博客 911

Lossless-Claw 插件实战:告别上下文截断,让 OpenClaw 永不遗忘

本文介绍了OpenClaw的Lossless-Claw插件,这是一个基于LCM论文的DAG摘要系统,能有效解决上下文截断问题。文章包含10个部分,从插件原理到实操指南: 核心原理:通过DAG结构持久化存储所有原始消息,将旧消息分块摘要并形成层级结构,保持上下文在模型Token限制内。 性能优势:在OOLONG基准测试中得分74.8,优于Claude Code的70.3,尤其在长上下文场景表现更佳。 功能特点: 提供lcm_grep、lcm_describe等工具主动回忆历史 摘要始终链接回原文,实现真正无损

u014798858的博客 2617

【WorkBuddy专栏09】WorkBuddy多模态能力深度揭秘

【WorkBuddy专栏09】AI不止会聊天——WorkBuddy多模态能力深度揭秘

AI人人懂 2108

Android 任务栈与启动模式

任务栈 android任务栈又称为task,它是一个栈结构,具有先进后出的特性,用于存放我们的Activity组件 只有在栈顶的Activity才能与用户进行交互 我们退出程序时只有把任务栈中所有的Activity移除栈,任务栈才会被销毁,任务栈也可以移动到前台,并且保留了每一个Activity的状态,可以有序的给用户列出他们的任务,同时也不会丢失Activity的状态信息 一个App中可能不止...

吴唐人的博客 509

Plecs电力电子仿真专业教程-第一季 第一节 Plecs简介

Plces 电力电子仿真专业教程系列依托专业的电力电子仿真软件Plecs对各种电力电子常用的拓扑及实际设计的方案进行系统及仿真与软件代码仿真实践。通过对各种电路仿真原理的讲解及专业C语言代码程序的编写,提升学员的系统设计能力,软件编程能力与理论分析能力。

3641

Activity的任务栈Task以及启动模式与Intent的Flag详解

Activity的任务栈Task以及启动模式与Intent的Flag详解 phoenixsky 关注 ...

Hunter2916的博客 396

使用 Simulink Real-Time 搭建一个完整的实时信号采集与滤波系统模型

本文详细介绍了基于Simulink Real-Time构建实时信号采集与滤波系统的完整流程。主要内容包括:系统配置(模型创建与参数设置)、信号采集模块搭建(模拟信号源或真实硬件连接)、实时滤波器设计(浮点/定点)、输出可视化(Scope/ToWorkspace等)、模型编译与下载到目标机、外部模式在线调试及数据保存方法。系统可实现微秒级实时信号处理,适用于工业控制、航空航天等对时间确定性要求高的场景。文章还提供了优化建议(多速率建模、优先级调度等)和应用场景说明,帮助读者快速掌握实时系统开发的核心技能。

amy_mhd的博客 304

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Activity的任务栈Task以及启动模式与Intent的Flag详解(经典博文,值得收藏

如何查看当前系统的任务栈 手机中 --> 长按home或者多任务键会进到 概览屏幕 的一个界面 命令行中 --> adb shell dumpsys activity 概览屏幕(Overview Screen) 概览屏幕(也称为最新动态屏幕、最近任务列表或最近使用的应用)是一个系统级别 UI,其中列出了最近访问过的Activity和任务。 用户可以浏览该列表并选择要恢复的任务,也可以通过滑动清除任务将其从列表中删除。 对于 Android 5.0 版本(API 级别 21),包含多个文档的

m0_63935374的博客 487

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Android启动模式小结

一、概述 1、分类 Android的启动模式分为以下四种: standard singleTop singleTask singleInstance 其中“standard”为activity的默认启动模式。 2、使用 直接在AndroidManifest.xml中的对应的activity中添加“android:launchmode”字段即可。

u013423595的博客 330

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Acitivty四种启动模式

Acitivty的四种启动模式   在清单文件中声明 Activity 时,您可以使用<activity>元素的launchMode属性指定 Activity 应该如何与任务关联。 launchMode属性指定有关应如何将 Activity 启动到任务中的指令。您可以分配给launchMode属性的启动模式共有四种: 1.standard(默认模式)  ...

banyinlve3147的博客 271

Android 任务栈和启动模式

android 任务栈和启动模式

李店店的博客 391

什么是任务栈task?

一,什么是任务栈task? 任务栈是用于只存放一组应用activity的集合。 二,任务栈task有哪些特点? 1,任务栈只存放四大组件中的activity 2,用户看到的界面是被放置在任务栈当中的。 三,任务栈的举例: 下面以邮件为例:   三,任务栈的四种启动模式: 1,standard:默认的启动模式,一个应用只维护一个task栈 2,singleTop:如果在清单文件使

u010509143的专栏 1930

Android Activity 的 launchMode 与 Task Stack 管理

Android 中的决定了Activity在启动时如何在任务栏中管理它的存在方式。下面我们来结合 Task Stack 管理详细解释。

居然是阿松的博客 1322

android开发笔记之 Activity四种加载模式

既然是安卓开发,我们就免不了和Activity打交道,因为它是前台的界面,也是android四大组件之一,那我们就来谈谈Activity的四种加载模式。为什么要为Activity指定加载模式?Android对Activity的管理,采用Task(即栈)来管理多个Activity,当我们启动一个应用时,Android就会为之创建了一个Task,然后启动这个应用的入口Activity。Android的T

minigeek的博客 3931

Android activity四种启动模式及Flag

android:launchMode启动模式是Activity启动时的模式,有两种设置方式: 在AndroidManifest.xml中的标签的android:launchMode属性设置 通过代码intent.addFlags(Intent.FLAG_ACTIVITY_*)来设置 TASK(任务栈)在理解activity启动模式前,我们需要有android的TASK(任务栈)的概念。 通常,我们

cchao1024 1084

task(任务栈)、Activity启动模式详解

task(任务栈) 1. android任务栈又称为Task,它是一个栈结构,具有后进先出的特性,用于存放我们的Activity组件。 比如Activity1-->Activity2-->Activity3,则任务栈为: 2. 我们每次打开一个新的Activity或者退出当前Activity都会在一个称为任务栈的结构中添加或者减少一个Activity组件,因此一个任务栈包含了一个activ

u010410851的博客 1150

Activity任务栈和启动模式

任务栈android的任务栈Task,是一个栈结构用来放置Activity实例的容器。和数据结构栈一样,具有先进后出的特性。 1. 我们每次打开一个新的Activity或者退出当前Activity都会在一个称为任务栈的结构中添加或者减少一个Activity组件,因此一个任务栈包含了一个activity的集合, android系统可以通过Task有序地管理每个activity,并决定哪个Activ

问心 359

Android 探索APP/应用启动模式、Intent的Flag启动标志位

Android的四种Activity启动模式(Standard、SingleTop、SingleTask、SingleInstance)决定了Activity在任务栈中的存在方式,影响返回顺序。Standard是默认模式,每次启动新实例;SingleTop仅在栈顶时复用;SingleTask复用栈内实例并清除上方Activity;SingleInstance独占一个任务栈。控制返回顺序需结合manifest配置和Intent的Flag(如FLAG_ACTIVITY_NEW_TASK)。

weixin_43522377的博客 882
上一篇: get和post两种提交方式的区 别
下一篇: Eclipse 如何同时打开查看多个文件
MQMaoQiang
博客等级 码龄18年 25粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值