在Android中,组件的动态运行,有一个最与众不同的概念,就是Task,翻译成任务,应该还是比较顺理成章的。 Task的介入,最主要的作用,是将组件之间的连接,从进程概念的细节中剥离出来,可以以一种不同模型的东西进行配置,在很多时候,能够简化上层开发人员的理解难度,帮助大家更好的进行开发和配置
任务
在 SDK中关于Task(guide/topics/fundamentals.html#acttask),有一个很好的比方,说,Task就相当于应用(application)的概念。在开发人员眼中,开发一个Android程序,是做一个个独门独户的组件,但对于一般用户而言,它们感知到的,只是一个运行起来的整体应用,这个整体背后,就是Task。 Task,简单的说,就是一组以栈的模式聚集在一起的Activity组件集合。它们有潜在的前后驱关联,新加入的Activity组件,位于栈顶,并仅有在栈顶的Activity,才会有机会与用户进行交互。而当栈顶的 Activity完成使命退出的时候,Task会将其退栈,并让下一个将跑到栈顶的Activity来于用户面对面,直至栈中再无更多 Activity,Task结束
事件 Task栈
点开Email应用,进入收件箱(Activity A) A
选中一封邮件,点击查看详情(Activity B) AB
点击回复,开始写新邮件(Activity C) ABC
写了几行字,点击选择联系人,进入选择联系人界面(Activity D) ABCD
选择好了联系人,继续写邮件 ABC
写好邮件,发送完成,回到原始邮件 AB
点击返回,回到收件箱 A
退出Email程序 null
如上表所示,是一个实例。从用户从进入邮箱开始,到回复完成,退出应用整个过程的Task栈变化。这是一个标准的栈模式,对于大部分的状况,这样的Task 模型,足以应付,但是,涉及到实际的性能、开销等问题,就会变得残酷许多。比如,启动一个浏览器,在Android中是一个比较沉重的过程,它需要做很多初始化的工作,并且会有不小的内存开销。但与此同时,用浏览器打开一些内容,又是一般应用都会有的一个需求。设想一下,如果同时有十个运行着的应用(就会对应着是多个Task),都需要启动浏览器,这将是一个多么残酷的场面,十个Task栈都堆积着很雷同的浏览器Activity,是多么华丽的一种浪费啊。于是你会有这样一种设想,浏览器Activity,可不可以作为一个单独的Task而存在,不管是来自那个Task的请求,浏览器的Task,都不会归并过去。这样,虽然浏览器Activity本身需要维系的状态更多了,但整体的开销将大大的减少,这种舍小家为大家的行为,还是很值得歌颂的
LaunchMode(启动模式)
1、标准模式
1)从task中启动Activity时,该Activity的新实例总是在当前
task中创建
2)每次启动Activity,都会创建该Activity类的新实例
3)一个task中可以存在同一Activity的多个实例
4)一个Activity的多个实例可以出现在多个task栈中
2、singleTop(又称单例模式)
1)如果启动模式设置为singleTop的Activity实例未处于栈顶,
则其表现与启动模式设置为standard的Activity的表现一致
2)如果启动模式设置为singleTop的Activity的实例位于任务栈的栈顶
则,不会创建该Activity的新实例。只是调用位于栈顶的该Activity
实例的onNewIntent方法,将新的intent传递给该实例。
3、singleTask
1)设置为singleTask的Activity,具有全局唯一性,在Android系统中
只能创建该Activity的一个实例。
2)如果启动s设置为singleTask的Activity时,已经存在该Activity的
实例,则将该实例之上的所有Activity实例释放,将该实例重新带回到
栈顶,并调用器onNewIntent方法,将新的intent传递给该实例
3)在创建设置为singleTask模式的Activity的实例时,如果当前task的
taskAffinity与该Activity的taskAffinity一致,则直接在当前task中
创建;如果当前task的taskAffinity值与该Activity的taskAffinity不一致
则在新的任务中创建该Activity的实例。
4、singleInstance
1)当创建设置为singleInstance模式的Activity时,总是在新的任务中创建
2)设置为SingleInstance模式的Activity,具有全局唯一性。在Android系统
中只能存在该Activity的一个实例
3)设置为singleInstance模式的Activity,总是单独在一个task中存在
也就是说在该Activity所在的task栈中不可能存在其他的activity
相关推荐
Android中的线程池与任务队列
详细讲解android task以及android四种加载模式。 测试及原理说明结合。
关于Android中的进程和线程文档,看完后对 Android里面的Task概念有更深的了解。
TimeTask是一个轻量简洁的定时任务队列框架,专注处理多组任务分发工作 TimeTask内部的实现时基于AlarmManager 广播,在任务与系统api中间做了较好的封装
android任务管理器源代码,可以支持:任务切换、停止、卸载等等操作
今天讲下如何定时执行后台任务。 主要使用到TimerTask,相信大家都用过,大家可以看下TimerTask的源码。这里是一个简单的TimerTaskDemo。
C# Task任务操作代码,动态定时间执行任务事件
Android 异步任务。减少了许多重复的工作,是一个Google的AsyncTask的精简版(使用Google的AsyncTask,内部开销比较大,不适合简单开发,对于比较负责或者要求多线程异步任务的时候比较适合使用Google的AsyncTask)
任务管理系统源码 一个采用VS2008+Sql2000开发的任务管理系统有任务管理和角色管理等
android task killer 仅是apk文件,没有源码,可到酷安网搜索资源,不要在这里下载
即使那个activitie可能来自不同的应用,Android也靠着把两个activity保存在同一个任务中来实现这种无缝的用户体验. 一个任务是用户在执行某种工作时所交互的activitie的集合.activitie们放置在一个栈("后退栈")中,...
一个简洁、实用、方便的Android异步处理库,已应用到百万日活的线上项目中
用golang写的task计划任务,任务类型前期只支持访问url,可以作为监控使用.可以使用邮件通知~~~正在完善中
XSLT Task 在ANT中的使用和配置
EasyTask简单易用的PHP常驻内存多进程任务管理器含windows组件
这是一个大佬的设计思路,主要用作参考用,用于android启动优化的操作,通过task来进行操作,值得借鉴!!分高但是值
使用 Task Coach 这个简单的 Todo 管理器,相信能让你的工作更加井井有条。目前该软件所具备的功能有:添加、删除、修改任务或子任务允许对任务的描述以及各种时间上的安排任务的分类保存过滤器自动保存等
NULL 博文链接:https://fonter.iteye.com/blog/686460
StackOverView a custom widget of android,like task manager of android 5.0.(Android 5.0 任务管理器控件)
spring-task注解以及xml两种方式的简单使用,亲测有用