Android App在crash的时候可以做一些操作,比方说记录异常文件并上传到服务器,或者接入类似腾讯bugly的异常分析平台,一个简单的做法就是前者,实现的代码如下:

package com.duoyin.stock.activity;

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 com.duoyin.stock.util.HAUtils;

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;

/**
 * Created by yeh on 2016/7/4.
 */
public class CrashHandler implements Thread.UncaughtExceptionHandler {private static final String TAG = CrashHandler.class.getName();
    private static final boolean DEBUG = true;

    private static final String PATH = Environment.getExternalStorageDirectory().getPath() + "/yehTest/log/";// log path
    private static final String FILE_NAME = "crash";

    private static final String FILE_NAME_SUFFIX = ".trace";

    private static CrashHandler sInstance = new CrashHandler();
    // 系统默认的异常处理(默认情况下,系统会终止当前的异常程序)
    private Thread.UncaughtExceptionHandler mDefaultCrashHandler;

    private Context mContext;

    private CrashHandler() {}public static CrashHandler getInstance() {return sInstance;
    }public void init(Context context) {mDefaultCrashHandler = Thread.getDefaultUncaughtExceptionHandler();
        Thread.setDefaultUncaughtExceptionHandler(this);
        mContext = context.getApplicationContext();
    }@Override
    public void uncaughtException(Thread thread, Throwable ex) {try {HAUtils.showMsg(mContext, "呃呃~~程序crash了~~~");
            // 导出当前的错误信息到sdcard
            dumpExceptionToSDCard(ex);
            uploadExceptionToServer();
        } catch (Exception e) {e.printStackTrace();
        }ex.printStackTrace();

        if (mDefaultCrashHandler != null) {mDefaultCrashHandler.uncaughtException(thread, ex);
        } else {Process.killProcess(Process.myPid());
        }}/**
     * 上传异常到服务器
     */
    private void uploadExceptionToServer() {}/**
     * 导出信息到SDCard
     *
     * @param ex
     */
    private void dumpExceptionToSDCard(Throwable ex) {if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {if (DEBUG) {Log.w(TAG, "sdcard unmounted,skip dump exception");
            }}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_NAME_SUFFIX);

        if (!file.exists()) {file.mkdir();
        }try {PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));
            pw.println(time);
            // 导出手机信息
            dumpPhoneInfo(pw);
            pw.println();
            // 导出异常的调用栈信息
            ex.printStackTrace(pw);
        } catch (Exception e) {Log.e(TAG, "dump crash info failed");
        }}private void dumpPhoneInfo(PrintWriter pw) throws PackageManager.NameNotFoundException {//应用的版本名称和版本号
        PackageManager pm = mContext.getPackageManager();
        PackageInfo pi = pm.getPackageInfo(mContext.getPackageName(), PackageManager.GET_ACTIVITIES);
        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);
    }
}

另外因为是全局操作需要在Application中调用如下的操作即可:

CrashHandler crashHandler = CrashHandler.getInstance();
crashHandler.init(this);

参考了任玉刚博客:

http://blog.csdn.net/singwhatiwanna/article/details/17289479

Android UncaughtExceptionHandler捕获crash的全局异常相关推荐

  1. 《全局异常捕获》劝劝潘子吧,别再用trycatch来处理异常了

    人世仙家本自殊,何须相见向中途.惊鸿瞥过游龙去,漫恼陈王一事无. 嗨,大家好,我是洛神,性别男.一个来自快乐星球的程序员. 欢迎大家专注我的公众号[程序员洛神],不仅分享技术,还会分享生活趣事.体育. ...

  2. Android UncaughtExceptionHandler 全局异常监控

    2019独角兽企业重金招聘Python工程师标准>>> 一.全局捕获异常 为了解决这样的问题,我们需要能够及时的捕获异常,但要捕获的地方是在太多,因此,我们需要进行全局性的异常捕获, ...

  3. Android开发之全局异常捕获

    Android开发之全局异常捕获 [转载请注明出处]本文出自付小华的博客 http://blog.csdn.net/klxh2009 今晨谷歌正式发布Android 8.0,新版本的Android O ...

  4. Android 全局异常捕获DefaultUncaughtExceptionHandler与Cockroach

    前言 Android中虽然可以通过设置 Thread.setDefaultUncaughtExceptionHandler来捕获全局的所有线程的异常,但主线程抛出异常时仍旧会导致activity闪退, ...

  5. android bug监控,Android UncaughtExceptionHandler 全局异常监控

    一.全局捕获异常 为了解决这样的问题,我们需要能够及时的捕获异常,但要捕获的地方是在太多,因此,我们需要进行全局性的异常捕获,那么如何捕获全局异常呢? 答案是UncaughtExceptionHand ...

  6. android捕获全局异常,并对异常做出处理

    2019独角兽企业重金招聘Python工程师标准>>> 在做项目时,经常会把错误利用异常抛出去,这样在开发时就可以通过手机抛的异常排查错误,很方便.但是当程序开发完毕,版本稳定,需要 ...

  7. app闪退后重启_安卓APP崩溃(crash)后重新启动,捕获全局异常重启APP

    在安卓应用中,如果是偶发性bug导致APP崩溃,APP可能会直接闪退或者白屏,用户体验不太好,我们可以在application中捕获到全局异常,然后再进行处理. 首先创建一个MainApplicati ...

  8. Android全局异常捕获

    Android全局异常捕获 参考文章: (1)Android全局异常捕获 (2)https://www.cnblogs.com/heweiquan/p/10973201.html 备忘一下.

  9. 在Android中自定义捕获Application全局异常,可以替换掉系统的强制退出对话框(很有参考价值与实用价值)

    在Android中自定义捕获Application全局异常,可以替换掉系统的强制退出对话框(很有参考价值与实用价值) 参考文章: (1)在Android中自定义捕获Application全局异常,可以 ...

最新文章

  1. 大龄程序员刚迈过了 35 岁这个“坎儿”,和大家说点儿心里话
  2. VisualStudioCode插件下载
  3. MySQL数据类型合集
  4. Spring框架—IoC容器
  5. nginx安装和配置实例
  6. 当html里语义化,HTML5语义化
  7. @程序员,沟通这项核心技能你掌握了多少?
  8. 服务器项目部署工具,通过工具SecureCRTPortable将项目部署到服务器上
  9. 计算机组成原理感想,学习计算机组成原理的感想
  10. 雅虎免费邮箱片头动画:Liam系列
  11. windows10清理鼠标右键菜单
  12. java整数最大_Java 整数最大值
  13. PL3376C-ASEMI电源管理芯片PL3376C
  14. 学习心得《稻盛和夫经营学》的读后感2300字
  15. Android广告SDK的Package
  16. 陶泓达:3.23黄金,原油,白银操作策略!
  17. 膜蛋白巯基氧化还原修饰红细胞膜/红细胞膜包裹共载藤黄酸和吲哚菁绿白蛋白纳米粒相关研究
  18. wmi服务或wmi提供程序_什么是WMI提供程序主机(WmiPrvSE.exe),为什么使用那么多的CPU?...
  19. 求解非齐次线性方程组算法
  20. 在Word简历中插入照片(图片)

热门文章

  1. resulttype和resultMap区别详解
  2. 判断火车票座位python代码_12306 火车票监控Python代码,12306python, import u
  3. Kafka分区消息积压排查指南
  4. 无聊游戏随笔--学院篇
  5. 游戏建模软件大PK,没想到赢家却是他
  6. google zxing二维码库 初始
  7. 使用qq邮箱作为找回密码发件邮箱。报错:参数或变量中有语法错误。 服务器响应为:mail from address must be same as authorization u
  8. Linux内核手帐之内存管理源码分析(一)
  9. SpringIOC手动装配(注入):构造器注入,静态工厂注入,实例化工厂注入
  10. 基于React的企业级实战项目的宜居商场