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

 更新时间:2020年06月12日 14:03:31   作者:小米科技Android 研发曹新雨  
这篇文章主要介绍了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 应用Crash 后自动重启的文章就介绍到这了,更多相关android 自动重启内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • RecyclerView设置间距和添加分割线的方法

    RecyclerView设置间距和添加分割线的方法

    在使用RecyclerView布局,经常需要调整间距和添加分割线以达到更美观效果,这篇文章主要介绍了RecyclerView设置间距和添加分割线的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09
  • Android中Activity的四种启动模式和onNewIntent()

    Android中Activity的四种启动模式和onNewIntent()

    android 中activity的启动模式分为四种,(standard、singleTop、singTask、singleInstance),本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-08-08
  • android中用xml文件实现带边框背景效果的方法

    android中用xml文件实现带边框背景效果的方法

    这篇文章主要给大家介绍了在android中xml文件实现带边框背景效果的方法,其实实现的功能不是很难,仅作记录,帮助需要的朋友们做个参考,需要的朋友们下面来一起看看吧。
    2017-06-06
  • Android string-array数据源简单使用

    Android string-array数据源简单使用

    这篇文章主要介绍了Android string-array数据源简单使用的相关资料,需要的朋友可以参考下
    2016-09-09
  • Flutter组件生命周期和App生命周期示例解析

    Flutter组件生命周期和App生命周期示例解析

    这篇文章主要为大家介绍了Flutter组件生命周期和App生命周期示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • 轻松实现Android3D效果通俗易懂

    轻松实现Android3D效果通俗易懂

    前几天有粉丝要求计蒙写一个3d效果的简单教程,其实这个在Android官方demo中是有的,可能对于新手而言看不太明白,于是根据本人自己的理解来写一个教程,并改成粉丝要求的样子
    2021-08-08
  • Eclipse+ADT+Android SDK搭建安卓开发环境的实现步骤

    Eclipse+ADT+Android SDK搭建安卓开发环境的实现步骤

    这篇文章主要介绍了Eclipse+ADT+Android SDK搭建安卓开发环境的实现步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 在Android app中实现九(n)宫格图片连续滑动效果

    在Android app中实现九(n)宫格图片连续滑动效果

    这篇文章主要介绍了在Android app中实现九(n)宫格图片连续滑动效果的方法,作者举了凤凰新闻应用的例子,同理功能图标也可以利用这样的滑动效果,需要的朋友可以参考下
    2016-02-02
  • Android软键盘遮挡的四种完美解决方案

    Android软键盘遮挡的四种完美解决方案

    输入密码时输入框被系统键盘遮挡了,大大降低了用户操作体验,在开发中如何解决软键盘遮挡问题呢,下面小编给大家带来了四种android软键盘遮挡问题,感兴趣的朋友一起学习吧
    2016-10-10
  • Android用webView包装WebAPP方法

    Android用webView包装WebAPP方法

    本篇文章通过流程讲解给大家详细介绍了Android用webView包装WebAPP的方法以及需要注意的地方,需要的朋友参考学习下。
    2018-02-02

最新评论