「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战」
相关文章:
Android 开发之Activity的启动模式-Standard
Android 开发之Activity的启动模式-SingleTop
Android 开发之Activity的启动模式-SingleTask
Android 开发之Activity的启动模式-SingleInstance
前言
Android 开发中Activity是所有的组件中最常用,也是最重要的一个组件,所以了解并理解它的使用是必不可少的,那么它是怎么启动的,启动模式又是怎么样的,有几种启动模式呢
Activity的启动
Activity的启动,深入一点就到系统级了,这个在我之前的文章里已经写过一篇关于Android 应用系统启动流程的文章,参考:Android 系统启动流程Init、Zygote、SystemService、ServiceManager,最终会到ZygoteInit类,这就从c++代码跳到了java代码。在ZygoteInit.java代码中首先设置了Java虚拟机的堆内存空间,然后启动一个类加载器加载Android启动依赖的类比如Activity等四大组件,dialog等UI的类,然后分出一个子进程启动SystemServer系统服务,在ActivityManagerService的systemReady方法中打开Android系统的第一个Activity。具体还是要看系统源码才可以更清楚的了解这个过程。
Activity的启动模式
Android系统为Activity的启动设置了四个启动模式:
- 标准模式(
Standard) - 栈顶复用模式(
SingleTop) - 栈内复用模式(
SingleTask) - 单例模式(
SingleInstance) 首先我们得了解,Activity的管理方式,Activity的管理方式是以栈的方式管理,也就是先进后出,从上而下的堆砌,像砌墙一样,所以先启动的Activity,都是最后销毁的,每按一次返回,就退出一个Activity任务栈:
所以Activity的启动模式,就是对它的管理方式,也就是对栈的模式进行管理,同时也是对Activity的生命周期的一个很好的管理,方便我们处理不同的业务场景。下面先简单介绍四种模式的定义
1)标准模式(Standard)
Android创建Activity时的默认模式,假设没有为Activity设置启动模式的话,默觉得标准模式。每次启动一个Activity都会又一次创建一个新的实例入栈,无论这个实例是否存在。
2)栈顶复用模式(SingleTop)
分两种处理情况:须要创建的Activity已经处于栈顶时,此时会直接复用栈顶的Activity。不会再创建新的Activity;若须要创建的Activity不处于栈顶,此时会又一次创建一个新的Activity入栈,同Standard模式一样。
3) 栈内复用模式(SingleTask)
若须要创建的Activity已经处于栈中时,此时不会创建新的Activity,而是将存在栈中的Activity上面的其他Activity所有销毁,使它成为栈顶。
4)单例模式(SingleInstance)
SingleInstance比较特殊,是全局单例模式,是一种加强的SingleTask模式。它除了具有它所有特性外,还加强了一点:具有此模式的Activity仅仅能单独位于一个任务栈中。
这个经常使用于系统中的应用,比如Launch、锁屏键的应用等等,整个系统中仅仅有一个!所以在我们的应用中一般不会用到。了解就可以。
以上就是对Activity的启动模式的简单介绍,接下来会针对每种模式再做详细的说明,有什么不对的地方还请留言指正