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里面,把应用在自己的进程里面的启动起来。
总结总结
您可能感兴趣的文章您可能感兴趣的文章:Android使用CrashHandler来获取应用的crash信息的方法完美解决Android Studio集成crashlytics后无法
编译的问题Android 中Crash时如何获取异常信息详解及实例基于Android应用中如何反馈Crash报告的详解解决android设备断
电重启后WIFI不能自动重连的BUG(收藏)