android app异常捕获

原创 2017年01月03日 11:36:31
import java.lang.Thread.UncaughtExceptionHandler;

import android.content.Context;
import android.content.pm.PackageInfo;

import com.ddsc.fincar.util.AppInfoUtils;

/**
 * 
 * @ClassName AppException
 * @Description 应用程序异常类:用于处理程序异常
 * 
 */
public class AppException extends Exception implements UncaughtExceptionHandler {

    private byte type;
    private int code;

    /** 系统默认的UncaughtException处理类 */
    private UncaughtExceptionHandler mDefaultHandler;

    private AppException() {
        this.mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
    }

    private AppException(byte type, int code, Exception excp) {
        super(excp);
        this.type = type;
        this.code = code;
    }

    public int getCode() {
        return this.code;
    }

    public int getType() {
        return this.type;
    }

    @Override
    public void uncaughtException(Thread thread, Throwable ex) {

        if (!handleException(ex) && mDefaultHandler != null) {
            mDefaultHandler.uncaughtException(thread, ex);
        }
    }

    /**
     * 自定义异常处理:收集错误信息&发送错误报告
     * 
     * @param ex
     * @return true:处理了该异常信息;否则返回false
     */
    private boolean handleException(Throwable ex) {
        if (ex == null) {
            return false;
        }

        final Context context = AppManager.getAppManager().currentActivity();

        if (context == null) {
            return false;
        }

        final String crashReport = getCrashReport(context, ex);

        // 发送崩溃日志
        SendErrorLogPostRequest logRequest = new SendErrorLogPostRequest(
                context, new HttpRequestListener(){});
        logRequest.setLoadingVisible(false);
        logRequest.setRequestParams(crashReport);
        HttpRequestQueue.addToRequestQueue(context, logRequest);

        try {
            Thread.sleep(300);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        AppManager.getAppManager().AppExit(context);
        android.os.Process.killProcess(android.os.Process.myPid());  

        return true;
    }

    /**
     * 获取APP崩溃异常报告
     * 
     * @param ex
     * @return
     */
    private String getCrashReport(Context context, Throwable ex) {
        PackageInfo pinfo = AppInfoUtils.getPackageInfo(context);
        StringBuffer exceptionStr = new StringBuffer();
        exceptionStr.append("Version: " + pinfo.versionName + "("
                + pinfo.versionCode + ")\n");
        exceptionStr.append("Android: " + android.os.Build.VERSION.RELEASE
                + "(" + android.os.Build.MODEL + ")\n");
        exceptionStr.append("Exception: " + ex.getMessage() + "\n");
        StackTraceElement[] elements = ex.getStackTrace();
        for (int i = 0; i < elements.length; i++) {
            exceptionStr.append(elements[i].toString() + "\n");
        }
        Throwable cause = ex.getCause();  
        if(cause != null){
            exceptionStr.append("Cause By: " + cause.getMessage() + "\n");
            StackTraceElement[] causenots = cause.getStackTrace();
            for (int i = 0; i < causenots.length; i++) {
                exceptionStr.append(causenots[i].toString() + "\n");
            }
        }

        return exceptionStr.toString();
    }

    /**
     * 获取APP异常崩溃处理对象
     * @param
     * @return
     */
    public static AppException getAppExceptionHandler(){
        return new AppException();
    }
}

application中需要Thread.setDefaultUncaughtExceptionHandler(AppException.getAppExceptionHandler());

版权声明:本文为博主原创文章,未经博主允许随便转载。

android app记录运行日志 捕获奔溃异常 ,存储日志到文件

app在运行过程中,为了后期的维护升级,记录日志是一个非常好的方法。 为了读取到app运行时的日志,一般的作法是单独开一个线程,在app运行的启动线程,然后app退出时停掉线程。 然而我们更好的方法是...

Android_APP级异常捕获实现方式

描述:App级异常捕获,并记录下CrashLog到文件。以下,代码。在Application的,onCreate中,初始化自定义的CrashHandlerimport android.app.Appl...

Android开发之全局异常捕获完美闪退APP专题

其实写这边文章之前,一直在考虑要不要标注为原创,因为全局异常捕获的机制,自己也是看了别人的文章学来的,百度全局异常捕获,出来的也都是一模一样的内容,只是博客位置不一样而已。但是最后要是决定标准为原创,...

android全局捕获异常,让app优雅的崩溃

怎么优雅的处理app的崩溃呢,就是把崩溃后弹出的某某某程序无响应的对话框给他去掉,让他直接闪退,是不是很牛逼,哈哈。话不多说,上代码...

android App异常报错捕获后使用javamail登录QQ邮箱发邮件的功能遇到的问题

网上参照了: 1.gundumw100的博客 http://gundumw100.iteye.com/blog/1182104 来实现了异常捕获,使用的是服务器来接收错误文件的 2.然后又参照了 简书...

android app记录运行日志 捕获奔溃异常 ,存储日志到文件

感恩原创:http://blog.csdn.net/u014763302/article/details/47422023app在运行过程中,为了后期的维护升级,记录日志是一个非常好的方法。为了读取到...

android app异常收集处理

  • 2016年06月13日 09:27
  • 524KB
  • 下载

异常捕获或自动重启app

  • 2014年11月16日 23:27
  • 235KB
  • 下载

Android APP长期运行于后台,重启后如何避免异常

首先来介绍onSaveInstanceState() 和 onRestoreInstanceState() 。关于这两个方法,一些朋友可能在Android开发过程中很少用到,但在有时候掌握其用法会帮我...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android app异常捕获
举报原因:
原因补充:

(最多只允许输入30个字)