扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
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()方法的) —除非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启动模式是什么) — 就像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中有哪些启动模式问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流