安卓APP崩溃(crash)后重新启动,捕获全局异常重启APP

  在安卓应用中,如果是偶发性bug导致APP崩溃,APP可能会直接闪退或者白屏,用户体验不太好,我们可以在application中捕获到全局异常,然后再进行处理。

首先创建一个MainApplication(项目中已有自定义application的不需要再创建):

public class MainApplication extends MultiDexApplication 


在minifast中注册:


  <application
        android:name=".MainApplication"


然后MainApplication中创建一个UncaughtException对象:

  private Thread.UncaughtExceptionHandler restartHandler = new Thread.UncaughtExceptionHandler() {
        public void uncaughtException(Thread thread, Throwable ex) {
            restartApp();
        }
    };



定义
重启方法:

  public void restartApp() {
        Intent intent = new Intent(getApplicationContext(), FlashActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
        RxBus.getDefault().post(RxBusConstant.FINISH);//把你退出APP的代码放在这,我这里使用了rxbus关闭所有Activity
        android.os.Process.killProcess(android.os.Process.myPid()); 
    }

最后在application的oncreat中注册这个handler就大功告成了:

   Thread.setDefaultUncaughtExceptionHandler(restartHandler);

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过捕获全局异常来实现APP崩溃后的重新启动。具体实现步骤如下: 1. 创建一个自定义的Application类,并在onCreate()方法中设置UncaughtExceptionHandler(全局异常处理器)。 ```java public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler()); } } ``` 2. 实现UncaughtExceptionHandler接口,重写uncaughtException()方法,在该方法中处理异常信息并重启APP。 ```java public class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler { @Override public void uncaughtException(Thread t, Throwable e) { // 处理异常信息 Log.e("MyUncaughtExceptionHandler", "uncaughtException: " + e.getMessage()); // 重启APP Intent intent = getPackageManager().getLaunchIntentForPackage(getPackageName()); PendingIntent pendingIntent = PendingIntent.getActivity( getApplicationContext(), 0, intent, PendingIntent.FLAG_ONE_SHOT); AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 1000, pendingIntent); // 结束进程 android.os.Process.killProcess(android.os.Process.myPid()); System.exit(1); } } ``` 在uncaughtException()方法中,首先处理异常信息,然后通过AlarmManager和PendingIntent实现重启APP的功能,最后通过killProcess()和System.exit()方法结束进程。 3. 在AndroidManifest.xml文件中注册自定义的Application类。 ```xml <application android:name=".MyApplication" ... </application> ``` 通过以上步骤,即可实现APP崩溃后的自动重启

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值