码迷,mamicode.com
首页 > 其他好文 > 详细

Activity和Task

时间:2015-03-13 00:16:26      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:

1.Task

  • 每个应用程序对应每个Task,Task里面以栈的形式存储多个Activity。
  • 不同应用程序的切换(如按下home键,去启动另一个app,该app显示在前台,之前app就被放置在后台)其实就是不同Task的前后台切换。
  • 按“back”键其实就是将当前Task(应用程序)顶部的Activity弹出,将下一个Activity显示出来

2.Activity(不同Task下,相同Task下)和Task

   Intent中还定义了flag属性(4个常量):

   FLAG_ACTIVITY_NEW_TASK;

   FLAG_ACTIVITY_CLEAR_TOP;

   FLAG_ACTIVITY_RESET_TASK_IF_NEEDED;

   FLAG_ACTIVITY_SINGLE_TOP;

   在<activity>标签中可以使用如下6个属性:

           android:taskAffinity=""
           android:launchMode=""
           android:allowTaskReparenting=""
           android:alwaysRetainTaskState=""
           android:clearTaskOnLaunch=""
           android:finishOnTaskLaunch=""

2.1 Task和Activity的亲属关系

     默认情况下,一个应用程序内的所有Activity都有亲属关系(它所属的Task),且属于同一个Task。

     亲属关系是指Activity所处的Task,某个Activity可以有多个”爸爸“(Task,前提是allowTaskReparenting设置为"true")

     亲属关系起作用的前提:

                  a.Intent里包含了FLAG_ACTIVITY_NEW_TASK标志

                    带有这个Intent的Activity会去找它的亲属关系的”爸爸“(Task),找到了

                    就置于该Task的顶部,没有则创建新的Task

                  b.<activity>里allowTaskReparenting设置为"true".

                   当该Activity在不同的Task(该Task与Activity具有亲属关系)里被启动(呼唤)时,

                   该Activity可以在不同的Task(前提是该Task与Activity具有亲属关系)之间移动

    修改亲属关系的方法:

              <activity>里taskAffinity属性可以设置它的亲属关系(指定所属的Task)。

2.2 launchMode(启动模式)

     该属性有四个值,分别为“standard”,“singleTop”,“singleTask”,“singleInstance”。它们决定了Activity的创建方式,以及如何响应intent的行为

      “standard”/“singleTop”

              共同点:

                       该模式的Activity可以实例化多次,并且每处理一个新的intent都会创建一个新的Activity来处理

                       (除了singTop的某种情况,如下)。standard为默认启动模式

              不同点:

                      (对intent的处理方式):当仅当singleTop的Activity位于目标Task,且位于stack的顶部,

                      当一个intent发过来的时候,它不会创建新的实例,而是调用它的onNewIntent()方法里处理该Intent。

      “singleTask”/“singleInstance”

               共同点:只能有一个实例,且总是位于stack的底部。

               不同点(对intent的处理方式):

                              singleTask的Activity只可以允许“standard”,“singleTop”的Activity进入它的Task里。

                              它处理intent的方式是,只有它位于stack的顶部时才调用onNewIntent()方法处理该Intent,不在顶部时则丢弃

                              而“singleInstance”的Activity不允许其他的Activity进入它的Task里,所以它既是位于

                              stack的底部,也位于stack的顶部,因此只能intent到来时只能由它处理(调用onNewIntent()方法)。

  2.3 清除堆栈

       默认情况下,当用户离开一个应用程序较长时间时,系统就会将Task的所有Activity清除,

       除了根Activity,既只保留初始的Activity。当然你可以通过以下属性的修改来改变。

       clearTaskOnLaunch:一旦用户离开应用程序再次返回时,系统会清除所有的Activity除

                                    了根Activity。

       alwaysRetainTaskState:保留Task的状态,即所有的Activity都不会被清除。

       finishOnTaskLaunch:可以用在所有的Activity上,不局限于根Activity,true表示一旦

                                    用户离开了task,则该Activity就不存在。

Activity和Task

标签:

原文地址:http://www.cnblogs.com/beyondbycyx/p/4334013.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!