Android 进程重启问题 android.os.Process.killProcess()

全局任务栈内有超过一个以上的 Activity 实例

此时,调用 Process.killProcess(Process.myPid())后,系统表现,类似"意外关闭"会重建关闭页面的前一个 Activity

清除所有任务栈并开启新进程打开指定 Activity

  • 实现代码
kotlin 复制代码
fun restartLauncher() {
    val intent = Intent.makeRestartActivityTask(ComponentName(MyApplication.instance.applicationContext, LauncherActivity::class.java))
    // intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
    MyApplication.instance.startActivity(intent)
    Process.killProcess(Process.myPid())
}
  • Intent.makeRestartActivityTask() 源码:
java 复制代码
public static Intent makeRestartActivityTask(ComponentName mainActivity) {
   Intent intent = makeMainActivity(mainActivity);
   intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
           | Intent.FLAG_ACTIVITY_CLEAR_TASK);
   return intent;
}

Intent.FLAG_ACTIVITY_CLEAR_TASK 是一个标志符,用于启动一个新的Activity时清除之前所有的Activity任务栈。当设置了该标志符后,启动新的Activity时会清除之前所有Activity任务栈中的所有Activity,使得新启动的Activity成为任务栈中唯一的Activity。

  • Intent#makeMainActivity()源码:
java 复制代码
// 将指定 activity,设置成 launcher intent
public static Intent makeMainActivity(ComponentName mainActivity) {
    Intent intent = new Intent(ACTION_MAIN);
    intent.setComponent(mainActivity);
    intent.addCategory(CATEGORY_LAUNCHER);
    return intent;
}

在指定 Activity 中可以输入Process.myPid()日志。 发现 pid 是变化的

  • 自定义 Intent 实现
kotlin 复制代码
fun restartLauncher() {
    val intent =  Intent(MyApplication.instance.applicationContext, LauncherActivity::class.java)
    intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
    MyApplication.instance.startActivity(intent)
    Process.killProcess(Process.myPid())
}

指定打开的 Activity 不是 launcher intent 也可以的
在应用重启的瞬间,会有短时的白屏现象

相关推荐
limingade2 小时前
手机打电话时由对方DTMF响应切换多级IVR语音菜单(话术脚本与实战)
android·智能手机·语音识别·蓝牙电话·多级ivr导航·手机个人400电话·手机电话实现ivr语音导航
知北游天3 小时前
Linux:再谈进程地址空间
android·linux·运维
君的名字3 小时前
【跨端框架检测】使用adb logcat检测Android APP使用的跨端框架方法总结
android
qq_171538854 小时前
让MySQL更快:EXPLAIN语句详尽解析
android·数据库·mysql
每次的天空5 小时前
Android-Glide学习总结
android·学习·glide
“初生”12 小时前
安卓手机安装 ChatGPT 全流程图文指南
android·chatgpt·智能手机
与籍同行13 小时前
20200201工作笔记常用命令要整理
android·笔记
tangweiguo0305198713 小时前
Android屏幕适配利器:Kotlin动态尺寸计算工具类完整封装
android·kotlin
aningxiaoxixi14 小时前
android property 系统
android
speop14 小时前
TASK05【Datawhale 组队学习】系统评估与优化
android·java·学习