您的位置:首页 > 移动开发 > Android开发

Android基础之LaunchMode

2016-07-13 00:07 483 查看

四种启动模式以及应用场景

学习Android很久了,平时开发很少涉及到Activity的启动模式,对其概念变得模糊起来,今天就来重温一下LaunchMode.

Standard

标准启动模式,是Activity默认的启动方式,只要startAcitity就会创建一个实例,依次放入栈中,先进后出,如下图:




图有点难看,大家明白意思就行。

应用场景:

默认普通的应用场景


SingleTop

判断栈顶是否存在该Activity实例,如果栈顶存在就复用该实例,栈顶不存在该实例就和Standard一样,如图:




应用场景:

当外界多次跳转到一个页面时,可以使用SingleTop,比如:

消息推送时,一下推了10条,每次都打开一个页面很累的,可以使用SingleTop。

SingleTask

单任务模式,如果没有创建过该实例,就新建实例,放到栈顶,如果有该实例就复用,同时清除掉该到栈顶的所有实例,从而保证在栈中,一个Activity只有一个实例,如图:




应用场景:

栈中只有一个实例,适合作为程序的入口点,如:任何应用打开浏览器,只会启动主界面一次。

SingleInstance

一个栈保证只有一个实例,不同类型的实例压入不同的任务栈,如图:




应用场景:

某个应用中用到了google地图,当退出该应用的时候,进入google地图,还是之前的界面 。

———————————————————————

实际应用

之前一直没有遇到过有关启动模式的问题,今天在系统分享的时候,在聊天室界面的LauncMode就产生了冲突:

我做的是系统分享,将消息分享给好友,并在聊天界面ChatRoom显示消息列表,自己可以在短信/浏览器/其他应用分享消息给好友,所以作为程序的入口点,只启动一次是比较合理的(在点击menu时,只有一个实例),因此LauncMode为SingleTask。

另外哥们做消息记录,点击记录进入聊天室,然后点击back键需要返回搜索记录页面,因此LauncMode为SingleTop更合适。





这样我们设置的启动模式就发生了冲突,经过协商,最后我们参照了微信的办法,root过的手机,通过adb shell我们发现常规聊天室和B聊天室不是一个Activity,所以最后只能重新做一个共享数据源的聊天室。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息