Android重启App
- 前言
自动重启App,这个需求会在很多地方用到,举两个例子:登录过期后、退出登录。想必大家百度过也有一定的处理方案,但是这些方案不是太复杂就是无效,还有就是cv选手,百度的东西真需要自己好好斟酌一下。避免大家踩坑也方便自己回顾,这里记录一下。
- 解决方案
Kotlin语法:
context.packageManager.getLaunchIntentForPackage(context.packageName)?.apply {
// 下面这个Flag至关重要,会清空栈里所有的Activity
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
context.startActivity(this)
}
// 结束进程
Process.killProcess(Process.myPid())
- 缺陷分析
如果该App以startService()的方式开启了一个或多个Service,调用上述代码重启后会造成Service也重启。需要在结束进程前stop所有已开启的Service,比较麻烦。如果需要让Service绑定Application的生命周期,这里推荐的写法是context.bindService(),这个context是Application的上下文,解绑的时候需要注意一下connection的引用。原理我这就不展开说了,大家百度一下吧。
如果大家有什么更好的解决方案,欢迎下面留言。