UncaughtExceptionHandler 奔溃自启动

由于程序异常,以自带的崩溃提示对用户不是很友好

我们需要给出委婉的提示

或者收集一些崩溃日志传到我们自己的服务器,来针对解决


首先自定义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 
	}
	
}
这样就可以,后期再补上收集错误日志的代码吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值