关闭

Android 初学activity的启动模式

标签: androidlauchMode
72人阅读 评论(0) 收藏 举报
分类:

  今天学习了一下activity的LaunchMode,突然就想尝试一下在博客上记录一下,所以参考Android开发艺术探究,写下了这篇文章,相当于一个总结!!

首先,默认情况下,我们会发现activity会保持”后进先出“的情况,即使是启动同一个活动,也会重复创建多个实例,这显然不合理,所以提供了启动模式来处理这个问题。启动模式有四种:standard,singleTop,singleTask,singleInstance:

(1)standard:

标准模式,也就是默认的启动模式,你每启动一个activity就会创建一个实例入栈,返回的时候,会遵照“后进先出”的原则。

(2)singleTop:

栈顶复用模式,这种模式下,会判断activity是否位于任务栈的栈顶,如果位于栈顶,则不会创建新的实例,同时onNewIntent()方法会被回调,如果不位于栈顶的话,则会重新创建该activity的实例。

(3)singleTask:

栈内复用模式,相比于其他模式,这是最为复杂的一种模式。这是一种单实例模式,该模式下,如果任务栈中存在该activity的实例的话,多次启动都不会创建新的activity实例,同时也会调用onNewIntent(),实例不存在的话,则会创建新的实例。该模式同时会请求需要的任务栈,任务栈不存在的话,会先创建任务栈后,在创建activity实例入栈。singleTask具有clearTop的效果,例如,以singleTask启动activity A,在A之上的活动都会被清除出栈。

singleTask启动模式中,activity需要的任务栈是根据TaskAffinity标识名字的,该属性默认值是包名,如果单独设置的话,不能与包名相同。TaskAffinity主要与singleTask或者allowTaskReparenting属性配对使用。任务栈分为前台任务栈和后台任务栈。

当TaskAffinity与singleTask同时使用时,activity会启动在与TaskAffinity相同名字的任务栈中。当TaskAffinity与allowTaskReparenting同时使用时,allowTaskReparenting的主要作用是activity的迁移,allowTaskReparenting被设置为true的话,当从应用A启动应用B的一个活动后,当B被启动时,该活动会被从A的任务栈中转移到B的任务栈中。我还没发现有什么用!!! 

(4)singleInstance:

单实例模式,这是一种加强的singleTask,它具有singleTask的所有属性,但它单独的处于一个任务栈中,所以不会创建的新的实例,除非这个任务栈被销毁。

指定启动模式:

(1)通过AndroidManifest.xml指定:

<activity
    android:name=".act.BuySuccessActivity"
    android:label="@string/title_act_buy_succ"
    android:launchMode="singleTop" />

通过lanuchMode指定。

(2)通过在Intent中设置标志位指定:

Intent intent =new Intent(this,MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

其中第二种的优先级大于第一种,同时存在以第二种为准,限定范围也有所不同,可根据需求选择。

书上列举了许多常用的标记位,这里也列出来方便大家查看:
FLAG_ACTIVITY_NEW_TASK
指定为singleTask模式启动。
FLAG_ACTIVITY_SINGLE_TOP
指定为singleTop模式启动。
FLAG_ACTIVITY_CLEAR_TOP
指定为singleTop默认具有该标志位,位于他栈上的所有activity都要出栈。
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
具有该标志的不会出现在activity历史activity的列表中,等同于android:excludeFromRecents="true"









1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1056次
    • 积分:184
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条