最新消息:关注【太平洋学习网】微信公众号,可以获取全套资料,【全套Java基础27天】【JavaEE就业视频4个月】【Android就业视频4个月】

Android收集程序崩溃日志的方法

Android 太平洋学习网 浏览 评论

安卓Android如何手机程序崩溃日志并上传到服务器呢?直接会用到Thread线程里面的UncaughtExceptionHandler接口方法,我们可以自定义一个类CrashHandler,代码如下:

package com.tpyyes;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.lang.Thread.UncaughtExceptionHandler;
import java.util.Date;

import android.content.Context;
import android.os.Environment;
import android.util.Log;

public class CrashHandler implements UncaughtExceptionHandler {

    private static CrashHandler instance;

    public static CrashHandler getInstance() {
        if (instance == null) {
            instance = new CrashHandler();
        }
        return instance;
    }

    public void init(Context ctx) {
        Thread.setDefaultUncaughtExceptionHandler(this);
    }

    /**
     * 核心方法,当程序crash 会回调此方法, Throwable中存放这错误日志
     */
    @Override
    public void uncaughtException(Thread arg0, Throwable arg1) {
        String logPath;
        if (Environment.getExternalStorageState().equals(
                Environment.MEDIA_MOUNTED)) {
            //logPath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + File.separator + "log";
            logPath = "/sdcard/Download/";

            File file = new File(logPath);
            if (!file.exists()) {
                file.mkdirs();
            }
            try {
                FileWriter fw = new FileWriter(logPath + File.separator  + "errorlog.log", true);
                fw.write(new Date() + "\n");
                // 错误信息
                // 这里还可以加上当前的系统版本,手机型号,MAC地址 等等信息
                StackTraceElement[] stackTrace = arg1.getStackTrace();
                fw.write(arg1.getMessage() + "\n");
                for (int i = 0; i < stackTrace.length; i++) {
                    fw.write("file:" + stackTrace[i].getFileName() + " class:"
                            + stackTrace[i].getClassName() + " method:"
                            + stackTrace[i].getMethodName() + " line:"
                            + stackTrace[i].getLineNumber() + "\n");
                }
                fw.write("\n");
                fw.close();
                // 上传错误信息到服务器
                // uploadToServer();
            } catch (IOException e) {
                Log.e("crash handler", "load file failed...", e.getCause());
            }
        }
        arg1.printStackTrace();
        android.os.Process.killProcess(android.os.Process.myPid());
    }


}

如何在Android程序中使用我们自定义的程序崩溃日志呢?只需要在程序入口MainActivity类中的onCreate方法中加入如下代码即可:

//全局异常捕获
CrashHandler crashHandler = CrashHandler.getInstance();
crashHandler.init(getApplicationContext());

至于上传生成的errorlog.log日志文件如何上传,就和普通的Java文件上传是一样的,等再onCreate方法中生成之后,就调用上传文件的方法即可,这里不再赘述。

来源网站:太平洋学习网,转载请注明出处:http://www.tpyyes.com/a/android/1015.html

与本文相关的文章

发表我的评论
取消评论

表情

您的回复是我们的动力!

  • 昵称 (必填)

网友最新评论