Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

android Task 学习笔记

$
0
0

task是什么?

task的作用?

task与stack的关系?

task什么时候创建?

        task是一组Activity实例的集合,这些实例是为了完成了一项特定的操作,按被激活的先后顺序存放在

一个与Task相对应的Stack中,这些实例可以是一个属于一个application的,也一个属于不同的的application的

,比如在写短信添加联系人时需要打开通讯录的里面的Activity,而从写短信到添加联系人再到后面的发送,

这一串的动作都是属于一个task。

         android的提供task机制是为了提高用户体验,比如写短信时添加联系人,写短信是属于sms application,

而添加联系人列表是属于contacts application的,虽然是属于两个不同的application,但用户添加完联系人后

又回到写短信的界面,感觉就像一个application,用起来非常的流畅,这就是task的功劳。

         当我们在homescreen中点击一个icon启动一个application时(此处假定此application在后台没有运行),

第一个启动的Activity会创建一个Task,每个Activity都会有一个affinity属性,来指定此Activity是属于哪个task,

默认的情况下一个application中的Activity的affinity属性都是相同的,即一个application中activity是属于同一个task的,

但这只是默认的情况,如果在Activity在AndroidManifest.xml注册时,添加属性

 android:taskAffinity="com.android.xxx" //此处的属性名不能与activity所在的包相同
 android:allowTaskReparenting="true" 

当Activity在被激活时,会另外创建一个Task,即一个application可以对应有多个task。虽然是新建了一个Task,

但是在按返回键时,还是会回到之前的activity,看google官方注解:

Note: Although the activity starts in a new task, theBack button still returns the user to the previous activity.

以下的两种Activity启动模式也会创建Task:

singleTask:这是Activity的单任务启动模式,即当Activity被激活时,会先判断是否有实例已存在已有的task中,

           如没有实例,则新建一个Task,Activity在此task中启动;如已有实例存在了,则把实例所在的Task作为一个整体

           从后台移到前台,见下图:

          

          这里有两种情况:一个是要被激活的Activity实例在Task所对应的栈的栈顶;二是被激活的Activity实例不在task的

          所对应栈的栈顶,此时就把此实例推到栈顶,在此实例上面的实例都会被推出栈而注销掉

singleInstance: 这是Activity单实例启动模式, 即第一次创建该实例的时候,会创建一个专属改实例的task,

            此task中没会有其他的实例,如果此task处于后台,再激活此Activity时,就会复用该实例,

            不会创建新实例和新task。       



作者:txj8612 发表于2013-5-18 11:20:14 原文链接
阅读:39 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>