package com.pps.customcrash; import java.io.File; import java.io.FileOutputStream; import java.io.PrintWriter; import java.io.StringWriter; import java.lang.Thread.UncaughtExceptionHandler; import android.content.Context; import android.os.Environment; import android.os.Looper; import android.widget.Toast; /** * �Զ����쳣��׽������ * @author jiangqingqing * @time 2013/10/14 13:14 * */ public class CustomCrash implements UncaughtExceptionHandler { private static CustomCrash instance=new CustomCrash(); private Context mContext; private CustomCrash(){} /** * * @return */ public static CustomCrash getInstance() { return instance; } /* * (non-Javadoc) ������д��׽�쳣 * @see java.lang.Thread.UncaughtExceptionHandler#uncaughtException(java.lang.Thread, java.lang.Throwable) */ @Override public void uncaughtException(Thread thread, Throwable ex) { //1,������Ϣ��sdcard�� saveToSdcard(mContext,ex); //2,Ӧ��׼���˳� showToast(mContext, "�ܱ�Ǹ,�������쳣,�����Ƴ�."); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } ExitApp.getInstance().exitAPP(); } /** * �����Զ��쳣������ * @param pContext */ public void setCustomCrashInfo(Context pContext){ this.mContext=pContext; Thread.setDefaultUncaughtExceptionHandler(this); } /** * �����쳣��Ϣ��sdcard�� * @param pContext * @param ex �쳣��Ϣ���� */ private void saveToSdcard(Context pContext,Throwable ex) { StringBuffer sBuffer=new StringBuffer(); //����쳣��Ϣ sBuffer.append(getExceptionInfo(ex)); if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ File file1=new File("sdcard/carsh/"); if(!file1.exists()){ file1.mkdir(); } File file2=new File("sdcard/carsh/carsh.txt"); FileOutputStream fos; try { fos=new FileOutputStream(file2); fos.write(sBuffer.toString().getBytes()); fos.flush(); } catch (Exception e) { e.printStackTrace(); } } } /** * ��ȡ����ת���쳣��Ϣ * @param ex * @return �쳣��Ϣ���ַ�����ʽ */ private String getExceptionInfo(Throwable ex) { StringWriter sw=new StringWriter(); ex.printStackTrace(new PrintWriter(sw)); return sw.toString(); } /** * ���е�������ʾ * @param pContext * @param msg */ private void showToast(final Context pContext, final String msg) { new Thread(new Runnable() { @Override public void run() { Looper.prepare(); Toast.makeText(pContext, msg, Toast.LENGTH_SHORT).show(); Looper.loop(); } }).start(); } }