全局异常捕捉,以及一些小的知识点
来源:互联网 发布:电脑的端口 编辑:程序博客网 时间:2024/06/04 20:23
这里有一个很厉害的操作,就是把程序里面的crash准确捕捉,然后打印,存在手机。需要的话也可以上传至服务器,这样的话我们的程序在上线之后,也能知道我们的程序出现了什么样的问题
上代码
public class CrashHandler implements Thread.UncaughtExceptionHandler { //文件夹目录 private static final String PATH = "/sdcard/crash_log"; //文件名 private static final String FILE_NAME = "crash"; //文件名后缀 public static final String FILE_NAME_SUFFIX = ".trace"; //上下文 private Context mContext; private static CrashHandler sInstance = new CrashHandler(); public CrashHandler() {} public static CrashHandler getInstance() { return sInstance; } public void init(Context context) { //将当前实例设为系统默认的异常处理器 Thread.setDefaultUncaughtExceptionHandler(this); //获取Context,方便内部使用 mContext = context.getApplicationContext(); } @Override public void uncaughtException(Thread thread, Throwable ex) { //导出异常息到S信D卡 dumpExceptionToSDCard(ex); //上传异常信息到服务器 uploadExceptionToServer(ex); //延时1秒杀死进程 SystemClock.sleep(2000); Process.killProcess(Process.myPid()); } private void dumpExceptionToSDCard(Throwable ex) { if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { 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)); //以当前时间创建log文件 File file = new File(PATH + FILE_NAME + time + FILE_NAME_SUFFIX); try { //输出流操作 PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file))); //导出手机信息和异常信息 PackageManager pm = mContext.getPackageManager(); PackageInfo pi = pm.getPackageInfo(mContext.getPackageName(), PackageManager.GET_ACTIVITIES); pw.println("发生异常时间:" + time); pw.println("应用版本:" + pi.versionName); pw.println("应用版本号:" + pi.versionCode); pw.println("android版本号:" + Build.VERSION.RELEASE); pw.println("android版本号API:" + Build.VERSION.SDK_INT); pw.println("手机制造商:" + Build.MANUFACTURER); pw.println("手机型号:" + Build.MODEL); ex.printStackTrace(pw); //关闭输出流 pw.close(); } catch (Exception e) { } } private void uploadExceptionToServer(Throwable ex) { Error error = new Error(ex.getMessage()); /*error.save(new SaveListener<String>() { @Override public void done(String objectId, BmobException e) { } });*/ }}
然后在全局注册一下
public class BaseApplication extends AppData { @Override public void onCreate() { super.onCreate(); CrashHandler crashHandler = CrashHandler.getInstance(); crashHandler.init(getApplicationContext()); }}
这样操作之后,再发生异常,就能自动打印了,如图
阅读全文
0 0
- 全局异常捕捉,以及一些小的知识点
- Springboot全局异常的捕捉
- 捕捉C#全局异常的事件处理
- Android-构建全局的异常捕捉类
- spring mvc 的全局异常捕捉
- SpringBoot-06的全局异常捕捉
- 关于捕捉全局异常
- springboot全局异常捕捉
- Android全局异常捕捉
- 捕捉全局异常
- SpringBoot全局异常捕捉
- 捕捉全局异常
- springboot 全局异常捕捉
- Android全局异常捕捉器
- spring boot全局异常捕捉
- spring boot 全局异常捕捉
- 捕捉全局异常简单篇
- C#如何捕捉Windows服务与WinForm的全局异常
- SpringBoot学习笔记之集成swagger
- bzoj1857 传送带
- 特征处理与特征选择
- java_字符串中子字符串出现的次数
- tomcat跨域访问配置
- 全局异常捕捉,以及一些小的知识点
- 利用伪元素和CSS3实现鼠标移入下划线向两边展开效果
- Windows安装Apache2.4
- HTTP 503 错误 – 服务不可用 (Service unavailable)
- UVA 11488 字典树
- arm-linux-gcc的使用
- 原生方式上传文件
- Java基础—网络编程【OSI/RM TCP/IP】【网络通信三要素】【UDP传输 & TCP传输】【DNS域名解析】
- 【网络流 最大流】【bzoj1458】士兵占领