您的位置:首页 > 移动开发 > Android开发

android捕获全局异常,CrashHandler

2016-03-23 16:18 387 查看
原文地址:http://blog.csdn.net/luck_apple/article/details/7768064

[java]
view plain
copy

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());   
    }  
  
}  

[java]
view plain
copy

  

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

[java]
view plain
copy

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

第二种方法:
package com.example.chl.myapplication;

import android.app.Application;
import android.os.SystemClock;
import android.util.Log;

/**
* Created by chl on 16-4-20.
*/
public class MyAppliction extends Application implements Thread.UncaughtExceptionHandler{
@Override
public void onCreate() {
super.onCreate();
Thread.setDefaultUncaughtExceptionHandler(this);
}

@Override
public void uncaughtException(Thread thread, Throwable ex) {
Log.d("exception","程序休息下。。。。");
SystemClock.sleep(2000);
android.os.Process.killProcess(android.os.Process.myPid());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息