Android 应用Crash 后自动重启的方法小结
作者:小米科技Android 研发曹新雨 发布时间:2021-06-10 11:34:43
标签:android,Crash,自动重启
前提
首先,我们肯定要在Application里面注册一个CrashHandler,监听应用crash
public class TestApplication extends MultiDexApplication {
private static TestApplication mInstance;
@Override
public void onCreate() {
super.onCreate();
Thread.setDefaultUncaughtExceptionHandler(new CrashHandler());
}
然后在这个CrashHandler 想办法重启应用。有两种方法如下:
方法1.通过AlarmManager
public class CrashHandler implements Thread.UncaughtExceptionHandler {
@Override
public void uncaughtException(Thread t, Throwable e) {
//重启app
/**
* 这种方式 功能是可以达成
* 但是有问题就是如果说你的app挂了 这时候会显示系统桌面
* 然后你的app有启动起来了
* 给人的感觉不太好
*/
Intent intent = new Intent();
Context context = TestApplication.getInstance();
intent.setClass(context, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
PendingIntent pendingIntent = PendingIntent.getActivity(context,0,intent,PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC,System.currentTimeMillis() + 100,pendingIntent);
Process.killProcess(Process.myPid());
System.exit(0);
}
}
方法2:
使用第三方库
implementation 'com.jakewharton:process-phoenix:2.0.0'
public class CrashHandler implements Thread.UncaughtExceptionHandler {
@Override
public void uncaughtException(Thread t, Throwable e) {
ProcessPhoenix.triggerRebirth(TestApplication.getInstance());
}
}
这个第三方库的原理是:
当app 崩溃的时候,ProcessPhoenix.triggerRebirth(TestApplication.getInstance());
就会触发启动另外一个进程的Activity,然后把当前崩溃的进程结束掉。在新进程的Activity里面,把应用在自己的进程里面的启动起来。
来源:https://blog.csdn.net/u013270444/article/details/106626658


猜你喜欢
- Viewpager通俗一点讲就是一个允许左右翻转带数据的页面的布局管理器,经常用来连接Fragment,它很方便管理每个页面的生命周期,使用
- 使用IDEA配置Maven搭建开发框架ssm教程一、配置Maven环境1.下载Maven:下载链接2.下载完成解压压缩包并创建本地仓库文件夹
- 由于最近的工作需要用到文本转语音的功能,在网上找到的资料有些不完整,特此记录下整个完整功能。这种方式的优点在于不会被浏览器限制,在js的文本
- BottomNavigationView 很早之前就在 Material Design 中出现了,但是直到 Android Support
- 本文实例讲述了Android AutoCompleteTextView控件基本用法。分享给大家供大家参考,具体如下:当输入部分内容之后会有相
- 本文实例讲述了C#画笔使用复合数组绘制单个矩形的方法。分享给大家供大家参考。具体实现方法如下:using System;using Syst
- 布局管理器在java.awt 包中提供了5中常用的布局管理器,分别式FlowLayout(流式布局管理器)、BorderLayout(边界布
- 目录第一种方式第二种方式第三种方式第四种方式(缺点:将所有的数字类型都会转为字符串)web项目中,Java后端传过来的Long/long类型
- 一:什么是Bitmap像素级的操作相信大家都知道一张jpg或png放大后会是一个个小格子,称为一个像素(px),而且一个小格子是一种颜色,也
- 1.JavaBean转Map1.1.简介这篇博客是通过反射来进行实现转换的在学习redis中,发现了一个知识点,就是Java对象转map,视
- DataGridView:显示数据表后台数据绑定:List<xxx> list = new List<xxx>();
- 目录使用格式化编辑手机号格式化编辑身份证号设置监听移除格式化的文本实现原理项目地址格式化编辑的需求一般是从编辑手机号开始的,UI 给出的效果
- SpringBoot默认的存放静态资源文件的位置是:注:SpringBoot中的src/main/resources/资源文件夹对应clas
- final,static,this,super 关键字总结正文开始@Assassin1. final 关键字:final 关键字,意思是最终
- 以公司和员工为例:公司是一,员工是多第一步 创建两个实体类,公司和员工写核心配置文件hibernate.cfg.xml写映射配置文件Comp
- 全面总结Android Service的使用方法,具体内容如下1、Service的种类按运行地点分类:其实remote服务还是很少见的,并且
- 1, 新建一个项目, 类型为 安装和部署 中的安装项目或安装向导 2,双击应用程序文件夹,添加所有需要的文件(包括图标,Access,图片和
- 前言列表是移动应用中用得最多的组件了,我们也会经常对列表元素进行增加或删除操作,最简单的方法是列表数据变动后,直接 setStat
- 观察者模式:对象间的一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象(被观察)。 以便一个对象的状态发生变化时,所有
- 本文实例讲述了Java基本数据类型与类型转换。分享给大家供大家参考,具体如下:相关内容:基本数据类型整型浮点型字符型布尔型数据类型转换数组首