activity的四种启动方式

android activity的四种启动方式

前言:一个项目中会包含多个activity(虽然现在已经出现有activity的应用),系统中使用任务栈来存储这些activity,任务栈呢,是一种“后进先出”的栈结构。举个栗子:当我们多次启动同一个(没有设置启动方式–即默认的启动方式)的activity的时候,系统会创建多个实例依次进入栈中。当back返回的时候,每按一次,一个activity出栈。直至栈空为止。按照这种做法就会大大的消耗内存,白白浪费了。下面就将解析安卓的四种启动方式。如有错误,欢迎指正,此处仅供自己面试学习使用。

android任务栈:我们每次打开一个新的Activity或者退出当前Activity都会在一个称为任务栈的结构中添加或者减少一个Activity组件,一个任务栈包含了一个activity的集合。android通过ActivityRecord、TaskRecord、ActivityStack、ActivityStackSupervisor,ProcessRecord有序地管理每个activity。

一:Standard 标准模式

这是android的默认启动方式,即使不在AndroidManifest.xml里面设置launchMode,也是默认的这个模式。每次启动一个A activity都会创建一个A activity的实例入栈,无论A activity是否存在。
生命周期:onCreate;onStart;onResume都会被调用。
举个例子:任务栈中有A、B、C三个activity,此时C处于栈顶,C的启动模式为Standard。若C跳转到 C;结果还会有一个C activity进入栈中,成为栈顶。

二:SingleTop栈顶复用模式

此模式分为2中情况:(1)如果需要创建的activity已经位于栈顶,此时直接复用该栈顶activity,不再创建新的activity;(2)如果要创建的activity不处于栈顶,此时才会创建一个新的activity入栈,同Standard一样。
生命周期:第一种情况:onCreate 、onStart不会被系统调用,因为他没有什么改变,但是onNewIntent会被调用(activity被正常创建的时候不会调用这个方法);第二种情况同Standard模式。
举个栗子:activity栈中有三个activity,分别是A、B、C。C处于栈顶,且为SingleTop模式。(1)情况1,C中加入点击事件,跳转到C中,此时的结果是复用栈顶的C。(2)情况2,C中加入点击事件跳转到A。结果是创建一个新的A 入栈,A成为栈顶。

三:SingleTask栈内复用模式

说明:如果创建的A activity已经处于栈中,此时不会创建新的Activity,而是会将A activity上面的其他activity摧毁,使得A成为栈顶。
生命周期:同SingleTop模式一样,只会回调一次onNewIntent方法。
举个栗子:此时有A、B、C三个activity,C位于栈顶,启动模式为SingleTask。(1)情况一,C中加入点击事件,跳转到C,此时直接复用栈顶的C Activity。(2)情况二,C跳到A ,会将A之上的所有activity销毁,使A成为 栈顶。

四:SingleInstance单实例模式

说明:全局单例模式,加强版的SingleTask模式。具有所有SingleTask的特性,除此之外,改模式的activity仅仅能单独位于一个任务栈中,这个经常应用于系统的应用中,如,锁屏,Launch等等,整个系统中仅仅有一个。


欢迎指正!!!


本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>