标签:ace direct bsp otf proc tac hone uncaught span
import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Build; import android.os.Environment; import android.os.Process; import android.util.Log; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.Date; /** * 在Application初始化时进行设置CrashHandler,并调用init()方法,便可以捕获异常 */ public class CrashHandler implements Thread.UncaughtExceptionHandler { private static final String TAG = "CrashHandler"; private static CrashHandler instance = new CrashHandler(); private Context mContext; private Thread.UncaughtExceptionHandler mDefaultHandler; private static final String PATH = Environment.getExternalStorageDirectory().getPath() + "/crash/log/"; private static final String FILE_NAME = "crash"; private static final String FILE_SUFFIX = ".trace"; private CrashHandler(){ } public static CrashHandler getInstance(){ return instance; } public void init(Context context){ this.mContext = context.getApplicationContext(); mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler(); Thread.setDefaultUncaughtExceptionHandler(this); } /** * 当程序出现未捕获的异常,则调用该方法 * @param t * 出现异常的线程 * @param e * 未捕获异常 */ @Override public void uncaughtException(Thread t, Throwable e) { try{ // 导出异常信息到SD卡中 dumpExceeptionToSDCard(e); // 将异常信息上传到服务器 upLoadExceptionToServer(); }catch(IOException ioEx){ ioEx.printStackTrace(); } e.printStackTrace(); // 如果系统提供了默认处理器,由系统处理,否则结束程序 if(mDefaultHandler != null){ mDefaultHandler.uncaughtException(t, e); }else{ Process.killProcess(Process.myPid()); } } private void dumpExceeptionToSDCard(Throwable e) throws IOException{ // 如果SD卡不存在,写入失败 if(! Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ Log.w(TAG, "sdCard not exists, dump exception failed"); return; } File dir = new File(PATH); if(!dir.exists()){ dir.mkdirs(); } long current = System.currentTimeMillis(); String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(current)); File file = new File(PATH + FILE_NAME + time + FILE_SUFFIX); try{ PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file))); pw.println(time); dumpPhoneInfo(pw); pw.println(); e.printStackTrace(pw); pw.close(); }catch (Exception exception){ Log.w(TAG, "dump crash info failed"); } } /** * 导入手机信息 * @param pw */ private void dumpPhoneInfo(PrintWriter pw) throws PackageManager.NameNotFoundException { PackageManager pm = mContext.getPackageManager(); PackageInfo pi =pm.getPackageInfo(mContext.getPackageName(), PackageManager.GET_ACTIVITIES); // app信息 pw.print("App version: "); pw.print(pi.versionName); pw.print("_"); pw.println(pi.versionCode); // android 版本号 pw.print("OS version: "); pw.print(Build.VERSION.RELEASE); pw.print("_"); pw.println(Build.VERSION.SDK_INT); // 手机制造商 pw.print("Vendor: "); pw.println(Build.MANUFACTURER); // 手机型号 pw.print("Model: "); pw.println(Build.MODEL); // CPU 架构 pw.print("CPU ABI: "); pw.println(Build.CPU_ABI); } private void upLoadExceptionToServer(){ // 未实现 } }
标签:ace direct bsp otf proc tac hone uncaught span
原文地址:https://www.cnblogs.com/lotz/p/11030449.html