Android 应用Crash 后自动重启的方法小结
前提
首先,我们肯定要在Application里面注册一个CrashHandler,监听应用crash
publicclassTestApplicationextendsMultiDexApplication{
privatestaticTestApplicationmInstance;
@Override
publicvoidonCreate(){
super.onCreate();
Thread.setDefaultUncaughtExceptionHandler(newCrashHandler());
}
然后在这个CrashHandler想办法重启应用。有两种方法如下:
方法1.通过AlarmManager
publicclassCrashHandlerimplementsThread.UncaughtExceptionHandler{
@Override
publicvoiduncaughtException(Threadt,Throwablee){
//重启app
/**
*这种方式功能是可以达成
*但是有问题就是如果说你的app挂了这时候会显示系统桌面
*然后你的app有启动起来了
*给人的感觉不太好
*/
Intentintent=newIntent();
Contextcontext=TestApplication.getInstance();
intent.setClass(context,MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
PendingIntentpendingIntent=PendingIntent.getActivity(context,0,intent,PendingIntent.FLAG_ONE_SHOT);
AlarmManageralarmManager=(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'
publicclassCrashHandlerimplementsThread.UncaughtExceptionHandler{
@Override
publicvoiduncaughtException(Threadt,Throwablee){
ProcessPhoenix.triggerRebirth(TestApplication.getInstance());
}
}
这个第三方库的原理是:
当app崩溃的时候,ProcessPhoenix.triggerRebirth(TestApplication.getInstance());就会触发启动另外一个进程的Activity,然后把当前崩溃的进程结束掉。在新进程的Activity里面,把应用在自己的进程里面的启动起来。
总结
到此这篇关于Android应用Crash后自动重启的文章就介绍到这了,更多相关android自动重启内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!