成都创新互联网站制作重庆分公司

Android如何应用Crash实现自动重启?

不懂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如何应用Crash实现自动重启?
当前地址:http://cxhlcq.com/article/jsjcsi.html

其他资讯

在线咨询

微信咨询

电话咨询

028-86922220(工作日)

18980820575(7×24)

提交需求

返回顶部