android捕获全局异常,CrashHandler

原文地址:http://blog.csdn.net/luck_apple/article/details/7768064


  1. package com.numob.david.util;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileWriter;  
  5. import java.io.IOException;  
  6. import java.lang.Thread.UncaughtExceptionHandler;  
  7. import java.util.Date;  
  8.   
  9. import android.os.Environment;  
  10. import android.util.Log;  
  11.   
  12. /** 
  13.  * 全局处理异常. 
  14.  * 
  15.  */  
  16. public class CrashHandler implements UncaughtExceptionHandler {  
  17.     /** CrashHandler实例 */  
  18.   
  19.     private static CrashHandler instance;  
  20.   
  21.     /** 获取CrashHandler实例 ,单例模式*/  
  22.   
  23.     public static CrashHandler getInstance() {  
  24.         if (instance == null) {  
  25.             instance = new CrashHandler();  
  26.         }  
  27.         return instance;  
  28.     }  
  29.   
  30.     @Override  
  31.     public void uncaughtException(Thread arg0, Throwable arg1) {  
  32. //        ScreenManager.getScreenManager().popActivity(Pay.activity);  
  33. //         arg0.stop();  
  34. //         arg0.destroy();  
  35.           
  36.         String logdir ;  
  37.         if(Environment.getExternalStorageDirectory()!=null){  
  38.             logdir = Environment.getExternalStorageDirectory().getAbsolutePath()  
  39.                     + File.separator + "snda"+File.separator+"log" ;  
  40.               
  41.               
  42.             File file = new File(logdir);  
  43.             boolean mkSuccess;  
  44.             if (!file.isDirectory()) {  
  45.                 mkSuccess = file.mkdirs();  
  46.                 if (!mkSuccess) {  
  47.                     mkSuccess = file.mkdirs();  
  48.                 }  
  49.             }  
  50.             try {  
  51.                 FileWriter fw = new FileWriter(logdir+File.separator+"error.log",true);  
  52.                 fw.write(new Date()+"\n");  
  53.                 StackTraceElement[] stackTrace = arg1.getStackTrace();  
  54.                 fw.write(arg1.getMessage() + "\n");  
  55.                 for (int i = 0; i < stackTrace.length; i++) {  
  56.                     fw.write("file:" + stackTrace[i].getFileName() + " class:" + stackTrace[i].getClassName()  
  57.                             + " method:" + stackTrace[i].getMethodName() + " line:" + stackTrace[i].getLineNumber()  
  58.                             + "\n");  
  59.                 }  
  60.                 fw.write("\n");  
  61.                 fw.close();  
  62.             } catch (IOException e) {  
  63.                 Log.e("crash handler""load file failed...", e.getCause());  
  64.             }  
  65.         }  
  66.         arg1.printStackTrace();  
  67.         android.os.Process.killProcess(android.os.Process.myPid());   
  68.     }  
  69.   
  70. }  
  1.   


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

  1. CrashHandler crashHandler = CrashHandler.getInstance();  
  2. 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());
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值