android捕获全局异常,CrashHandler


package com.numob.david.util;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.Thread.UncaughtExceptionHandler;
import java.util.Date;

import android.os.Environment;
import android.util.Log;

/**
 * 全局处理异常.
 *
 */
public class CrashHandler implements UncaughtExceptionHandler {
    /** CrashHandler实例 */

    private static CrashHandler instance;

    /** 获取CrashHandler实例 ,单例模式*/

    public static CrashHandler getInstance() {
        if (instance == null) {
            instance = new CrashHandler();
        }
        return instance;
    }

    @Override
    public void uncaughtException(Thread arg0, Throwable arg1) {
//        ScreenManager.getScreenManager().popActivity(Pay.activity);
//         arg0.stop();
//         arg0.destroy();
    	
    	String logdir ;
    	if(Environment.getExternalStorageDirectory()!=null){
	    	logdir = Environment.getExternalStorageDirectory().getAbsolutePath()
					+ File.separator + "snda"+File.separator+"log" ;
	    	
	    	
	    	File file = new File(logdir);
			boolean mkSuccess;
			if (!file.isDirectory()) {
				mkSuccess = file.mkdirs();
				if (!mkSuccess) {
					mkSuccess = file.mkdirs();
				}
			}
			try {
				FileWriter fw = new FileWriter(logdir+File.separator+"error.log",true);
				fw.write(new Date()+"\n");
                StackTraceElement[] stackTrace = arg1.getStackTrace();
                fw.write(arg1.getMessage() + "\n");
                for (int i = 0; i < stackTrace.length; i++) {
                    fw.write("file:" + stackTrace[i].getFileName() + " class:" + stackTrace[i].getClassName()
                            + " method:" + stackTrace[i].getMethodName() + " line:" + stackTrace[i].getLineNumber()
                            + "\n");
                }
				fw.write("\n");
				fw.close();
			} catch (IOException e) {
				Log.e("crash handler", "load file failed...", e.getCause());
			}
    	}
    	arg1.printStackTrace();
        android.os.Process.killProcess(android.os.Process.myPid()); 
    }

}


Activity或是Application中加入这样的代码 :

CrashHandler crashHandler = CrashHandler.getInstance();
crashHandler.init(getApplicationContext());


今天只做简单介绍了。


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值