android全局的异常捕获

来源:互联网 发布:生物多样性数据 编辑:程序博客网 时间:2024/05/22 06:13

android异常捕获已经很普遍,我们捕获发布前没有测试出的问题,发送到后台,以便于更好的优化APP。

public class CrashHandler implements Thread.UncaughtExceptionHandler {    public static CrashHandler instance;    private Context mContext;    private CrashHandler() {    }    public static synchronized CrashHandler getInstance() {        if (instance == null) {            instance = new CrashHandler();        }        return instance;    }    public CrashHandler build(Context context) {        this.mContext = context;        return instance;    }    @Override    public void uncaughtException(Thread thread, Throwable ex) {        ex.printStackTrace();        StringBuffer err = new StringBuffer();        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        err.append("\tat ");        err.append(format.format(new Date(System.currentTimeMillis())));        err.append("\tat ");        err.append("app_version:" + getAppVersion());        err.append("\tat ");        err.append(ex.toString());        err.append("<==>\n");        StackTraceElement[] stack = ex.getStackTrace();        if (stack != null) {            for (int i = 0; i < stack.length; i++) {                err.append("");                err.append("\tat ");                err.append(stack[i].toString());                err.append("\n");            }        }        // 在此可以把用户手机的一些信息以及异常信息捕获并上传,也可以使用UMeng,UMeng的统计分析在这方面有api接口来调用,        System.out.println(err.toString());        android.os.Process.killProcess(android.os.Process.myPid());    }}

在application中使用

public class CrashApplication extends Application {    @Override    public void onCreate() {        super.onCreate();        CrashHandler crashHandler = CrashHandler.getInstance().build(getApplicationContext());        Thread.setDefaultUncaughtExceptionHandler(crashHandler);    }}

在manifest中注册这个CrashApplication

<application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:name=".application.CrashApplication"        android:label="@string/app_name"        android:supportsRtl="true"        android:theme="@style/AppTheme">        <activity android:name=".view.MainActivity">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application>

友盟的错误分析

0 0
原创粉丝点击