android应用崩溃重启

mac2026-05-24  1

一、创建一个捕捉崩溃信息的BugHandler 类

public class BugHandler implements Thread.UncaughtExceptionHandler { private static BugHandler instance; private Application application; private Thread.UncaughtExceptionHandler mDefaultHandler; private boolean exit = false; /** * 保证只有一个CrashHandler实例 */ private BugHandler(Context context) { application = (Application) context.getApplicationContext(); mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler(); Thread.setDefaultUncaughtExceptionHandler(this); } /** * 获取CrashHandler实例 ,单例模式 */ public static BugHandler getInstance(Context context) { BugHandler inst = instance; if (inst == null) { synchronized (BugHandler.class) { inst = instance; if (inst == null) { inst = new BugHandler(context.getApplicationContext()); instance = inst; } } } return inst; } /** * 当UncaughtException发生时会转入该函数来处理 */ @Override public void uncaughtException(Thread thread, Throwable ex) { try { StringWriter stringWriter = new StringWriter(); PrintWriter printWriter = new PrintWriter(stringWriter); ex.printStackTrace(printWriter); printWriter.close(); String unCaughtException = stringWriter.toString();//详细错误日志 FileUtils.writeErrorLog(unCaughtException, FilePath.LOG_PATH + System.currentTimeMillis() + ".txt"); Log.e("崩溃信息", unCaughtException); //杀死崩溃进程 ActivityManager.getInstance().AppExit(application); //重新启动 // Intent intent = new Intent(application, TeaSplashActivity.class); // //开启新进程 // intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // KeepActiveService.facePay = false; // application.startActivity(intent); //通过包名直接启动 PackageManager packageManager = application.getPackageManager(); Intent intent =packageManager.getLaunchIntentForPackage("com.test.zy"); application.startActivity(intent); } catch (Exception e) { e.printStackTrace(); } mDefaultHandler.uncaughtException(thread, ex); }

重启的方式有两种:

通过包名在新的进程中打开启动页

注意事项:

1、通过打开引导页启动APP需要在新的进程中打开:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

2、杀死之前的进程时,一定要把所有的Activity都关闭,然后在杀死之前的进程。

public void AppExit(Context context) { try { //关闭所有的Activity finishAllActivity(); android.app.ActivityManager activityMgr = (android.app.ActivityManager) context .getSystemService(Context.ACTIVITY_SERVICE); activityMgr.killBackgroundProcesses(context.getPackageName()); System.exit(0); } catch (Exception e) { } }

二、在Application中注册

@Override public void onCreate() { super.onCreate(); BugHandler.getInstance(this); }
最新回复(0)