关于Activity的launchModel-----处理tok
2021-06-07 本文已影响0人
v587的毅哥
不废话直接上代码,在application里添加如下方法:
class App : Application() {
companion object {
lateinit var instance: App
}
override fun onCreate() {
super.onCreate()
instance = this
}
/**
* 跳转到登录界面(同时关闭当前app里所有已经打开过的activity,前提是你没搞过singleTask和singleInstance这种)
*/
fun startLoginActivity() {
startActivity(
Intent(this, LoginActivity::class.java)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK)
)
}
}
使用:
//任何地方都可调用
App.instance.startLoginActivity()
另外说一下singleTop
和Intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
,懂的人不需要往下看了
-
singleTop
只有在目标activity
的launchModel
设置为singleTop
且目标activity
处于栈顶时才会调用onNewIntent()
,否则仍然是新建activity
(也就是当作standard
来处理) - 对于
launchModel
都默认是standard
的情况下
比如启动流程为:Activity1 -> Activity2 -> Activity3 -> Activity4
的情况下,想要干掉Activity2、Activity3、Activity4
而直接回到Activity1
可以使用startActivity(Intent(context,Activity1).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
再补充一下singleTask
和singleInstance
-
singleTask
:在activity
的launchModel
设置为singleTask
时,其他应用app来启动这个activity
会启动包含这个activity
的整个app,按返回键会在包含这个activity
的app里一层一层返回,当这个app最底的Activity
被返回后,最后才回到启动者的app。 -
singleInstance
:在singleTask
的基础上单独用一个task
来存放,与包含它的app都不在同一个task
里哦。
P.S. singleTop
其实与standard
是兄弟,与跟它长得更像的singleTask
和singleInstance
更疏远(疏远是指应用场景,singleTask
和singleInstance
基本是用作跨app使用,singleTop
和standard
一般是在本app内需求使用)。