由于程序异常,以自带的崩溃提示对用户不是很友好
我们需要给出委婉的提示
或者收集一些崩溃日志传到我们自己的服务器,来针对解决
首先自定义UncaughtExceptionHandler
MyUnCeHandler.class
package com.ruiyi.testuncatchexception;
import java.lang.Thread.UncaughtExceptionHandler;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Looper;
import android.os.SystemClock;
import android.util.Log;
import android.widget.Toast;
/**
* @author ruyi
* @version 创建时间:2016年2月17日 下午2:54:33
*
*/
public class MyUnCeHandler implements UncaughtExceptionHandler{
private MyAppcation application;
private UncaughtExceptionHandler mDefaultHandler;
public MyUnCeHandler(MyAppcation application) {
this.application = application;
// 获取系统默认的UncaughtException处理器
mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
}
@Override
public void uncaughtException(Thread thread, Throwable ex) {
if (!handleException(ex) && mDefaultHandler != null) {
// 如果用户没有处理则让系统默认的异常处理器来处理
mDefaultHandler.uncaughtException(thread, ex);
} else {
SystemClock.sleep(2000);
Intent intent = new Intent(application, MainActivity.class);
PendingIntent restartIntent = PendingIntent.getActivity(application, 0, intent,
Intent.FLAG_ACTIVITY_NEW_TASK);
// 500毫秒钟后重启应用
AlarmManager mgr = (AlarmManager) application.getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 500, restartIntent);
// 退出程序
application.finishApplication();
}
}
private boolean handleException(Throwable ex) {
if (ex == null) {
return false;
}
// System.out.println("aaa");
// Log.i("ASDFGHJKL", ex.getMessage());
new Thread() {
@Override
public void run() {
Looper.prepare();
Toast.makeText(application, "很抱歉,程序出现异常,即将退出.", Toast.LENGTH_SHORT).show();
Looper.loop();
}
}.start();
return true;
}
}
然后在我们自己的Application 设置就好了
MyAppcation.class
package com.ruiyi.testuncatchexception;
import java.util.ArrayList;
import android.app.Activity;
import android.app.Application;
/**
* @author ruyi
* @version 创建时间:2016年2月17日 下午2:51:54
*
*/
public class MyAppcation extends Application {
@Override
public void onCreate() {
super.onCreate();
// 设置该CrashHandler为程序的默认处理器
Thread.setDefaultUncaughtExceptionHandler(new MyUnCeHandler(this));
//TODO init
}
}
这样就可以,后期再补上收集错误日志的代码吧