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

Android进阶系列2-Activity启动模式

2016-08-09 18:24 363 查看
今天了解了下Activity启动模式,网上的文章多以代码测试结果为结论,结合Android源码讲解的比较少,罗升阳大神有关于源码的一些分析,并告诉我们谷歌告诉我们“make sure to test the usability of the activity during launch“。。。学习了几篇文章:http://www.cloudchou.com/android/post-768.htmlhttp://blog.csdn.net/zhangjg_blog/article/details/10923643http://blog.csdn.net/mynameishuangshuai/article/details/51491074等,文章中有图文并茂的分析结果。本着博主一贯的精神,这里我只做个总结,细节和分析流程大家可以参考上述文章。就总结Activity启动模式方面,个人觉得《Android开发艺术探索》总结得比较全,本文在此基础上再做一些精炼。读者还可以对着这篇文章最后给出的五个问题,加深下印象。深入理解Activity启动模式(三)–Activity启动模式特点。博主也会抽空把自己的思考答案贴上来和大家分享。

Android的启动模式涉及几个方面:1. 没有怎么办?2. 有了怎么办?本文按LaunchMode的四种模式分别说明。

1. standard

不管有没有,直接创建新的实例。创建了放哪儿啊,谁启动的,放谁所在的任务栈。

2. singleTop

如果栈顶有,则不用创建,用已有的。如果已有的不再栈顶或者没有,则创建新的实例。

注意:对于这两种模式,不管TaskAffinity是多少,都不受影响,实例放在默认包名对应的任务栈中

——————————————我是分割线—————————————-

3. singleTask

如果没有,结合TaskAffinity创建:如果TaskAffinity单独指定,对应的任务栈不存在,则先创建任务栈,再创建实例放入。如果任务栈已经存在,直接创建实例存入。TaskAffinity没有单独指定,直接加入到启动它的Activity所在的任务栈即可。

如果已经存在:单例模式,只要存在,就不用再创建新的实例。切换到栈顶时,会将栈内它上方的Activity全都出栈。

4. singleInstance

单实例模式,和singleTask的存储相比,一个任务栈放且只能放一个Activity实例。

如果没有,创建一个新的任务栈并创建实例放入。如果有,复用。注意:singleInstance类型的Activity启动其他一般Activity时,framework会为它它加上FLAG_ACTIVITY_NEW_TASK标志,这时 被启动的Activity和singleTask模式的启动方式一致

同学们可能发现,四种模式对应启动别人和被别人启动,总共就是好几种可能(暂时来不及算清楚了。。。)。实际使用中要以实测为准,而且还有Activity的Flags等其他控制量,所以掌握最常见的基础之上,遇到坑爹的问题也容易排查。

今天是七夕,楼主得先去吃饭了!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息