Android 应用Crash 后自动重启的方法小结

作者:小米科技Android 研发曹新雨 时间:2021-06-10 11:34:43 

前提

首先,我们肯定要在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

标签:android,Crash,自动重启
0
投稿

猜你喜欢

  • Unity排行榜优化滚动效果

    2021-09-08 13:02:07
  • SpringBoot注解梳理(小结)

    2023-11-10 13:27:19
  • Android使用PowerImageView实现播放强大的ImageView动画效果

    2022-06-16 19:55:54
  • java并发编程包JUC线程同步CyclicBarrier语法示例

    2023-01-18 07:44:58
  • JNDI简介_动力节点Java学院整理

    2023-04-20 03:19:23
  • Java实现淘宝秒杀聚划算抢购自动提醒源码

    2022-09-11 10:11:53
  • Spring注解之@Lazy注解使用解析

    2023-08-28 23:12:23
  • Java 自定义Spring框架以及Spring框架的基本使用

    2021-05-29 19:35:57
  • 深入JAVA对象深度克隆的详解

    2022-01-05 14:03:13
  • Java利用自定义注解、反射实现简单BaseDao实例

    2022-09-06 05:29:30
  • Java Socket 编程详解

    2022-06-13 12:06:57
  • SpringBoot注册Filter的两种实现方式

    2023-01-01 10:26:05
  • c#的sortedlist使用方法

    2023-09-22 04:58:13
  • 详解C#中的session用法

    2022-10-29 22:03:13
  • java计算两点间的距离方法总结

    2023-12-21 17:32:45
  • java实现省市区转换成树形结构

    2022-11-27 03:43:37
  • java如何读取超大文件

    2022-10-24 08:20:54
  • 详解java爬虫jsoup解析多空格class数据

    2021-12-30 14:47:41
  • Java 获取网站图片的示例代码

    2022-03-11 14:52:44
  • Javaweb实现在线人数统计代码实例

    2023-01-17 10:19:24
  • asp之家 软件编程 m.aspxhome.com