android異常捕獲已經很普遍,我們捕獲發佈前沒有測試出的問題,發送到後臺,以便於更好的優化APP。
public class CrashHandler implements Thread.UncaughtExceptionHandler {
public static CrashHandler instance;
private Context mContext;
private CrashHandler() {
}
public static synchronized CrashHandler getInstance() {
if (instance == null) {
instance = new CrashHandler();
}
return instance;
}
public CrashHandler build(Context context) {
this.mContext = context;
return instance;
}
@Override
public void uncaughtException(Thread thread, Throwable ex) {
ex.printStackTrace();
StringBuffer err = new StringBuffer();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
err.append("\tat ");
err.append(format.format(new Date(System.currentTimeMillis())));
err.append("\tat ");
err.append("app_version:" + getAppVersion());
err.append("\tat ");
err.append(ex.toString());
err.append("<==>\n");
StackTraceElement[] stack = ex.getStackTrace();
if (stack != null) {
for (int i = 0; i < stack.length; i++) {
err.append("");
err.append("\tat ");
err.append(stack[i].toString());
err.append("\n");
}
}
// 在此可以把用戶手機的一些信息以及異常信息捕獲並上傳,也可以使用UMeng,UMeng的統計分析在這方面有api接口來調用,
System.out.println(err.toString());
android.os.Process.killProcess(android.os.Process.myPid());
}
}
在application中使用
public class CrashApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
CrashHandler crashHandler = CrashHandler.getInstance().build(getApplicationContext());
Thread.setDefaultUncaughtExceptionHandler(crashHandler);
}
}
在manifest中註冊這個CrashApplication
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:name=".application.CrashApplication"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".view.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>