[android]android Task 任务 简介

http://blog.csdn.net/guomeijuan916/article/details/8121468

关于Android中的组件和应用,之前涉及,大都是静态的概念。而当一个应用运行起来,就难免会需要关心进程、线程这样的概念。在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

时间: 08-07

[android]android Task 任务 简介的相关文章

开源项目Universal Image Loader for Android 说明文档 (1) 简介

 When developing applications for Android, one often facesthe problem of displaying some graphical content from the Internet. So, youshould provide image loading from the Web in an Android app, their processingand displaying with limited memory aga

android的task任务栈

转自http://blog.csdn.net/liuhe688/article/details/6761337 古人學問無遺力,少壯工夫老始成.紙上得來終覺淺,絕知此事要躬行.南宋.陸遊<冬夜讀書示子聿(yù)> 软件行业也是一样,多少前辈不遗余力的奋斗才出现了软件行业的繁荣的景象,其中已有不少成为大师级人物.今天我们站在伟人的肩膀上,自然会有不少的优势,但不要忘了,要在对技术的认知方面有所提升,仍需我们去实践,去实践. 今天我们来讲一下Activity的task相关内容. 上次我们讲到Act

Android Studio使用心得 - 简介与环境配置

关于Android Studio 在2013 Google IO大会上发布的全新IDE Android Studio相信各位猿们并不陌生,截止2014的Google IO大会,虽然依然木有发布正式版,但是根据我这几周的使用情况来说,BUG已经很少了,完全不影响正常使用.而且Android Studio是基于IntelliJ的,无论从运行速度上还是编程的快捷性上,都比Eclipse的体验要好,开发效率妥妥的提高了. Android Studio vs Eclipse ADT 目前Android S

android之Task和Back Stack(回退栈)

通常一个应用程序包括多个Activity,我们在使用程序是,一个Activity到另一个Activity,又到别的Activity,然后我们按下返回键又能按打开的顺序,倒叙返回.android中是怎么做到的?Task和Back Stack与此密不可分. Task存储了一组页面的集合,并且这个集合会被排列到一个叫Back Stack中,保存的目的在于记录Activity的打开顺序. 特点:系统会给每个程序分配唯一的Task和回退栈. 回退栈的特点:先进后出. 改变Activity的排序方式:是通过

Android学习5&mdash;布局简介

Android界面的布局主要有四种,分别为RelativeLayout.LinearLayout.TableLayout.FrameLayout,接下来分别介绍这些布局如何使用(为了简单起见,接下来的介绍工作中,我分别附上布局文件的代码以及效果图,供大家参考) 一:RelativeLayout <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="htt

【转】Android 网络通信框架Volley简介(Google IO 2013)

Volley主页 https://android.googlesource.com/platform/frameworks/volley http://www.youtube.com/watch?v=yhv8l9F44qo&feature=player_embedded 1. 什么是Volley 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的Go

Android多媒体-底层流程简介

先上图,根据图做一个简单介绍 我们讲一下MediaPlayer 应用层的播放器首先调用framework层的MediaPlayer的类,接着FrameWork层会继续调用Native层的MediaPlayer类,然后通过Binder调用MediaPlayerService,MediaPlayerService调用OpenVC库解码成原始的视频流和音频流,视频流通过UI一帧一帧的显示出来,MediaPlayerService将解码后的音频流交给AudioTrack,接着交给AudioFlinger

android 部分原生Adapter简介之ArrayAdapter

在很多情况下,都不需要自己去实现一个adapter,可以直接用google给我们所提供的adapter. 因为Adapter既负责提供数据,又负责创建代表每一个条目的视图,所有Adapter可以从根本上修改它们所绑定的空间的外观和功能. 下面重点讲两个最常用.有用的原声adapter: 1.ArrayAdapter:ArrayAdapter使用泛型来把Adapter视图绑定到一个指定类的对象的数组.默认情况下,ArrayAdapter将使用一个对象数组的每个元素的toString值来填充指定布局

【转】Android 防破解技术简介

http://www.cnblogs.com/likeandroid/p/4888808.html Android 防破解技术简介 这几年随着互联网的不断发展,Android App 也越来越多!但是随之而来的问题也越来越多,这其中比较令人头疼的问题就是:有些不法分子利用反编译技术破解 App,修改代码,之后再重新编译上传到应用商店!到时候,如果用户下载了这些应用,就可能造成个人信息或者金钱的丢失!所以,作为开发者的我们,有必要学习一些防止被破解的技术手段了! 简介 现在想要破解一个 App,

android 部分原生Adapter简介之SimpleCursorAdapter

SimpleCursorAdapter用于将一个Cursor绑定到一个AdapterView,并使用一个布局来定义每个行/条目的UI.每个行当视图的内容是底层Cursor中对应行的列值进行填充的. SimpleCursorAdapter是通过传入当前的上下文.用于每个条目的一个布局资源.一个代表要显示的数据的Cursor和两个整数数组进行构建的,这两个数组的其中一个包含了要使用的列(包含资源数据)的索引,另一个(同样大小的)数组存储资源ID,用于指定布局内的哪些视图应该用来显示相应的列的内容(就