首页 / 更多教程 / 捕获程序crash信息
捕获程序crash信息
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了捕获程序crash信息,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3151字,纯文字阅读大概需要5分钟。
内容图文
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(){ // 未实现 } }
内容总结
以上是互联网集市为您收集整理的捕获程序crash信息全部内容,希望文章能够帮你解决捕获程序crash信息所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。