在我们的实际开发中,我们都避免不了遇到我们程序crash直接崩掉的情况,这对用户来说是很不友好的 ,当然也是我们开发者不想看到的。所以我们希望当我们的程序发生异常crash的时候,我们能够得治用户的crash信息,我们也可以在程序crash的时候弹出一个对话框告诉用户程序crash了。然后再退出,这样比闪退会好一些。
在安卓中我们可以利用CrashHandler来监视我们应用的crash信息。这里也将CrashHander引入到我们的框架中去。
- package com.nsu.library.utils.log;
- import android.content.Context;
- import android.content.pm.PackageInfo;
- import android.content.pm.PackageManager;
- import android.os.Build;
- import android.os.Environment;
- import java.io.*;
- import java.util.Calendar;
- import java.util.Locale;
- /**
- * Create By Anthony on 2016/1/16
- * 当前类注释:异常处理类,将我们的异常信息保存到本地SD卡上面或者上传到服务器
- */
- public class UncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {
- private static final boolean DEBUG =true;
- private static final String TAG ="UncaughtExceptionHandler";
- private Context mContext;
- private Thread.UncaughtExceptionHandler mDefaultHandler;
- public UncaughtExceptionHandler(Context context, Thread.UncaughtExceptionHandler defaultHandler){
- this.mDefaultHandler = defaultHandler;
- this.mContext = context;
- }
- @Override
- public void uncaughtException(Thread thread, Throwable ex) {
- Log.e("Crash", "Application crash", ex);
- writeFile(thread, ex);//将异常信息保存到SD卡上面
- //TODO 在这里写方法将异常信息上传到服务器
- mDefaultHandler.uncaughtException(thread, ex);
- }
- private void writeFile(final Thread thread, final Throwable ex){
- //如果SD卡不存在则无法写入
- if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
- if(DEBUG){
- Log.w(TAG,"SDCard unmounted, skip write exception to file");
- return ;
- }
- }
- try {
- OutputStream os = getLogStream();
- os.write(getExceptionInformation(thread, ex).getBytes("utf-8"));
- os.flush();
- os.close();
- andr