今晚闲着没事,于是心血来潮,翻译一下常用的Activity启动模式的文档,以前总是看别人写好的,没有认真阅读过API,也当让自己加深理解Activity的启动模式。大家可以去这里查看原版的文档
https://www.google.com.hk/?gws_rd=cr,ssl#newwindow=1&safe=strict&q=activity+launchmode
由于本人英文水平有限,难免会出现比较拗口的地方,还请大家多多指正,我会尽快修复完善,让译文更适合中国程序猿阅读。
下面献上我的译文:
1,Activity的四种启动模式:
"standard"
"singleTop"
"singleTask"
"singInstance"
2,默认的启动模式是”standard”.如上表所示,主要分为两组:”standard”和”singleTop”,”singleTask”和”singInstance”
3,”standard”或者”singleTop”模式的Activity可以多次实例化。这种实例可以在任何task,也可以在Activity栈的任何位置。通常情况下:这种实例通过StartActivity()进入任务(Task)(除非Intent包含了指示:FLAG_ACTIVITY_NEW_TASK,在这种情况下,选择一个不同的Task)。
4,相反,”singleTask”和”singInstance”模式的Activity只能开启一个Task,总是在Activity栈的根部。而且,在一个Task中只能初始化一次Activity.
5,”standard”和”singleTop”模式只在一个方面不同:只要有一个新的Intent启动”standard”模式的Activity,就会创建一个Activity实例。每个实例处理单个的Intent.
类似的是:”singleTop”模式的Activity,当处理一个新的Intent,也可能会创建一个新的实例。但是,如果目标Task中已经存在了一个在栈顶的”singleTop”模式Activity,这个实例会接收新的Intent(在OnNewIntent()方法中),不会在创建一个新的实例。在其他情况下,比如:在目标Task中已经存在了”singleTop”模式的Activity实例,但是不在栈顶,或者在栈顶,但是不在目标Task中,这时就会创建一个新的实例,并压入栈。
类似:在当前Task中,如果你向上浏览activity,Activity的Behavior取决于Activity的启动模式。如果Activity启动模式
是”singleTop”(或者上面的Intent携带标识FLAG_ACTIVITY_CLEAR_TOP),这个Activity被移动到栈顶,并且他的状态会被保存。intent就会在Activity的OnNewIntent()中处理。如果Activity的启动模式是”standard”(并且上面的Intent没有携带标识FLAG_ACTIVITY_CLEAR_TOP),当前Activity实例会被弹出栈,并且创建一个新的实例接收intent.
6,”singleTask”和”singInstance”模式也是只有一个差别:
“singleTask”模式的Activity允许其他Activity共用这个Task。”singleTask”模式的Activity总是在栈的根部,但是可以启动其他的Activity(必须是”standard”和”singleTop”的Activity)。
“singInstance”模式的Activity,一方面不允许其他Activity共用一个Task,在一个Task中只能有一个Activity.如果启动其他Activity,这个Activity会被分配到一个不同的Task中,类似intent.FLAG_ACTIVITY_NEW_TASK效果。
7,如上表所示,”standard”是默认的模式,适用于绝大多数的Activity.对很多Activity,”singleTop”模式同样适用。
其他的模式:”singleTask”和”singInstance”不适合大多数应用,因为产生交互模型不同于大多数应用,用户很可能不熟悉。
(————————-End————————–)
至于是否如文档所说的效果,不妨在程序里面逐个尝试一下,亲身验证一下,是否正确,也可以加深对Activity启动模式的理解。