Android启动模式静态launchMode设置和动态setFlags设置,同时设置时以哪种设置为准?
网上搜到的都是说setFlags优先级更高,但我实际验证发现并非如此。
AndroidManifest 中设置
<activity
android:name=".AActivity"
android:launchMode="singleTop" />
同时代码中设置
//这段代码在AActivity中
button4.setOnClickListener {
val i = Intent(this, AActivity::class.java)
i.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
startActivity(i)
}
如果setFlags优先级更高,AActivity会销毁然后再重新被创建。但实际情况是,AActivity并未销毁(当然更加不会重新被创建),显然就是singleTop启动模式的逻辑。
为了防止是我对Intent.FLAG_ACTIVITY_CLEAR_TOP理解不正确,我删掉AndroidManifest中的android:launchMode="singleTop"后,AActivity会销毁然后再重新被创建。从结果来看,显然是android:launchMode优先级更高。
这两个没什么优先级。
launchMode是配置的启动方式,编译时就指定启动模式。
setFlags是在运行时重新指定的,会覆盖原来的方式。就像你初始化了一个变量并赋值,然后运行时改变了这个值一样。
根据你的操作,销毁重新创建,是因为删了android:launchMode="singleTop",默认用standard方式,他的作用和FLAG_ACTIVITY_CLEAR_TOP这个是一样的,都是销毁之后重新创建
之前大致看过一点这里的源码相关的知识,AnroidManifest相关的应该在app启动的时候就会实例化的,比如你在AnroidManifest里面指定的启动模式,最终应该都是转化为flag的,singleTop相当于 FLAG_ACTIVITY_SINGLE_TOP 这时候 你又增加了 FLAG_ACTIVITY_CLEAR_TOP标识,所以此时 你的singleTop + FLAG_ACTIVITY_CLEAR_TOP,启动效果 应该和FLAG_ACTIVITY_SINGLE_TOP +FLAG_ACTIVITY_CLEAR_TOP是一样的 , 不会重新销毁重建,只是拉起来了,此时的效果就和singleTask差不多了。