1、Activity的启动模式有哪几种,分别用于什么场景?
activity的启动模式分为4种 standard 标准模式, singleTop 栈顶复用模式,singleTask栈内复用模式,SingleInstance 单实例模式
使用方式:在AndroidManifest 配置文件中配置
<activity android:name=".MainActivity"
android:launchMode="standard">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
standard 标准模式:
说明: standard 是Activity 的标准模式,如果在AndroidManifests 没有写启动模式,则默认为standard 模式.每次启动一个Activity都会又一次创建一个新的实例入栈,无论这个实例是否存在
生命周期: standard 启动的Activity,生命周期为正常的生命周期 :onCreate, onStart,onpash,onStop,onDestory
举例: 目前有ABC三个Activity A在栈顶,则此时需求启动A 会按照正常的生命周期 不会复用栈顶,而是会重新启动一个A
singleTop 栈顶复用模式:
说明: singletop 的意思是复用栈顶的Activity,如果启动栈顶的Activity 不用重复创建Activity,如果该Activity已经存在但不是在栈顶,则该Activity会被重新创建
生命周期: singletop 的生命周期,如果Activity在栈顶则不用调用onCreate ,onStart .其余非在栈顶的是正常的生命周期
举例: 目前有ABC三个Activity A在栈顶,则此时的需求是启动A ,不会走onCreate,onstart.如果A不在栈顶,b在栈顶,b启动A则A是正常的生命周期
singleTask 栈内复用模式
说明:Activity在该模式下启动,实际启动的是一种单例的模式.singleTask模式下启动分为两种状态.1.启动singleTask下的Activity如果他找的任务栈存在,则activity 会像singletop一样复用这个Activity 不会调用它的onCreate,onStart .并拿到栈顶.2.如果他找的任务栈不存在的话,它会重新创建一个Activity 这时候的Activity是正常的生命周期
生命周期: 启动singleTask下的Activity如果他找的任务栈存在,则activity 会像singletop一样复用这个Activity 不会调用它的onCreate,onStart .并拿到栈顶.如果他找的任务栈不存在的话,它会重新创建一个Activity 这时候的Activity是正常的生命周期
举例: 下面有一个s1的任务栈.该任务栈里面有ABC三个Activity
- 有一个D的Activity 要以singTask 的模式启动,该Activity想要寻找的不是s1任务栈,而是想找个新的s2任务栈,则系统会为它创建一个新的任务栈,而D按照正常的生命周期运行
- 有一个D的Activity 要以singTask 的模式启动,该Activity想要寻找的是s1任务栈.因为是A启动的D .则该任务栈里会重新创建一个D 的Activity
- 还是这个D 这次A又一次的调起D 该任务栈里已经有了D ,则D不会重新调用,而是会复用.
网友评论