Android App 结束运行后重启
16lz
2021-01-23
退出方法
- 杀死当前进程
android.os.Process.killProcess(android.os.Process.myPid()) ;
- 退出虚拟机
System.exit(0);
效果相同,杀死当前进程,对私有的子进程无效。 比如 com.example.foo
会被杀死, com.example.foo:remote
不受影响
自动重启
Android 在任务栈仍有内容,但进程被杀死时,会认为这是异常退出,尝试重启应用。具体操作方法是
- 退出当前 Activity,如果已经是任务栈底,那么不会重启页面。
- 重新运行 Application
- 从任务栈栈顶向下寻找应用入口 Activity,找到后重新启动并替换到任务栈的原位置
- 其他在任务栈当前 Activity 到入口 Activity 之间位置的 Activity,位置不变,轮到他们显示时会重走初始化的生命周期
- 可以通过 save 和 restoreState 的方法来恢复之前的页面状态
完全退出不重启的方法
思路是通过模拟栈操作,先把任务栈中尚存的 Activity 依次 finish,然后再调用退出方法,这样就可以了。
- 建立一个存放 Activity 引用的链表
- Application 中注册 Activity 生命周期的监听器,
onCreate
时添加引用,onDestory
时移除。 - 执行退出指令前遍历 finish。
这样持有引用会不会泄露 ?
- 与 Activity 原有生命周期绑定了,所以不会泄露。
- 注意 Application 初始化时要判断 processName,防止多次初始化
把这种退出后重启的特性当做真正的重启功能来利用
没错,Android 没有提供快速重启应用的方法,但由于 Android 的硬件兼容性好,可能在很多非手机的设备上,开发特定功能的应用,作为智能设备使用。
利用这种退出后重启特性,我们不需要集成为系统桌面,也能快速重启 App 了。
思路是
- LauncherActivity 只作为一个根使用,展示 LOGO 或者广告,做自动跳转,不要 finish 掉
- 遍历退出时 finish 到倒数第二层就停止,即 LauncherActivity 之上的那个 Activity,然后杀死进程
- 按照之前所述的流程,系统会退出当前 Activity,重新初始化 Applicatvion,重启 LauncherActivity 并替换你的任务栈根页面,整个过程跟冷启动没有区别。
- 需要注意一点,远程进程并不会受这个过程影响,不会重新初始化
更多相关文章
- Android unspecified' depends on one or more Android Librarie
- android控件-ImageView使用方法整理
- android的listview 嵌套在 ViewPage 多次调用getview原因和解决
- Android提交数据到服务器的两种方式四种方法
- 《Android开发艺术探索》读书笔记--part2 IPC进程间通信机制
- android 程序开发的插件化 模块化方法 之一
- Android初始化OpenGL ES,并且分析Renderer子线程原理
- android开机自启动apk的方法