一、创建一个捕捉崩溃信息的BugHandler 类
public class BugHandler implements Thread.UncaughtExceptionHandler {
private static BugHandler instance
;
private Application application
;
private Thread
.UncaughtExceptionHandler mDefaultHandler
;
private boolean exit
= false;
private BugHandler(Context context
) {
application
= (Application
) context
.getApplicationContext();
mDefaultHandler
= Thread
.getDefaultUncaughtExceptionHandler();
Thread
.setDefaultUncaughtExceptionHandler(this);
}
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
;
}
@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
);
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 {
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);
}