< 返回技术文档列表

Android中有哪些启动模式

发布时间:2021-09-01 01:58:32⊙投诉举报

Android中有哪些启动模式,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

不同程序的Android启动模式可以共享一个affinity;同一个程序的activity可以使用不同的afninity。afninity在符合以下2个条件的时候启动:当启动acitity的Intent中含有FLAG_ACTIVITY_NEW_TASK 节点,或者一个activity的allowTaskReparenting 属性设置为"true"。

之前提到,任务的默认通过startActivity(). 激活的默认activity也和其他activity在一个堆栈里面。但是引发这个activity的Intent通过startActivity() 方法传递了 FLAG_ACTIVITY_NEW_TASK 节点。望文知意,这个节点表示新的任务。但是,也不一定;如果任务中没有含有此afinity的activity,那么它从默认的activity开始。

allowTaskReparenting 节点如果activity的 allowTaskReparenting 属性设置为 "true", 它就可以脱离开始它的任务,然后通过它的afinity指引,走入下一个任务。例如,假设“旅游软件”有一个activity可以获取指定城市的天气。

这个activity和此程序中的其他activity有同样的afinity(默认的afinity)。并且允许重新转入另外的任务。某个activity开始了天气预报动作,它一开始属于这个任务;但是旅游程序到前台运行的时候,天气预报acivity被分配到旅游程序运行。

如果从用户角度看,一个.apk文件包含许多程序,你必须适当的分配不同的affinity给activitis,哪个任务将包含intent指定要运行的activity:对于 "standard" 和 "singleTop" 模式,启动activity的intent 。

(即调用 startActivity()方法的) &mdash;除非intent对象包含FLAG_ACTIVITY_NEW_TASK 节点,如果是的话,会像上个章节描述的一样, Affinities and new tasks,另外一个任务会承载这个activity。

相对的, "singleTask" 和 "singleInstance" 模式使得activity永远在tast的根,他们初始化一个任务,不会融入到其他任务中 。activity是否会有多个实例. "standard" 或 "singleTop"模式的activity可以被示例化多次,属于多个任务,或者一个任务中有多个此activity的实例。

相对的,, "singleTask" 和 "singleInstance" 模式的activities限制为只能有一个实例。因为这些activity在任务的根,这表示,任务也只有一个。同一个任务中是否可以有其他的activity: "singleInstance" 模式的activity所在的任务中不能有其他的activity ,如果启动其他activity。

那么其他activity 会被附加到新的任务(不管新activity的Android启动模式是什么) &mdash; 就像intent使用了 FLAG_ACTIVITY_NEW_TASK 标记。在其他方面, "singleInstance" 和 "singleTask"没有什么区别。

其他三种模式允许多个acitvity在同一个任务中。singleTask 的activity必须在任务的根,它可以启动其他设置到该任务的activity。而standard" 和 "singleTop"可以用于任务的任何位置。

一个类的新实例是否可以接受、处理其他部分发来的intent: 默认的"standard" 模式可以响应任何新的intent。每个实例处理一个intent。 "singleTop" 模式的activity如果在任务的顶部,则用已有的实例处理所有请求该实例的intent;反之创建一个新的实例,并压入任务的顶部。

例如,一个任务包含根activityA,和其他activityB,C,D,D在任务堆栈的顶部,即堆栈为A-B-C-D. 一个intent请求D。如果D是"standard" Android启动模式,则D的一个新实例被创建,任务堆栈变为A-B-C-D-D. 但是。

如果D的Android启动模式是"singleTop", 则现有的D的实例来响应intent,所以任务堆栈仍然是A-B-C-D. 另外一种情况,如果intent来请求B,如果B是 "standard" 或者 "singleTop" 模式,B都将创建一个新的实例来响应,则任务堆栈为 A-B-C-D-B。

就像上面提到的,"singleTask" 或 "singleInstance" 的activity只有1个实例,所以这个实例要处理所有的intent。"singleInstance" 的activity永远在任务堆栈的顶部(因为它是任务中的***个activity),所以这个实例处理所有的intent。可能有其他的activity在"singleTask" 的activity的顶部,因此这个实例不会处理intent请求,因此intent的请求会失败;(即使失败,intent也会激活这个程序)

注意:当一个新的activity的实例为了响应intent而创建时,用户可以按BACK键回到上一个状态(上一个activity)。但是当一个已经存在的activity处理新的intent的时候,用户不能按BACK键后退了。

关于Android中有哪些启动模式问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注血鸟云行业资讯频道了解更多相关知识。


/template/Home/Zkeys/PC/Static