android 通过UncaughtExceptionHandler处理和上传错误日志
来源:互联网 发布:bluecloud 新域名 编辑:程序博客网 时间:2024/06/06 00:47
首先 重写CrashHandler 继承自UncaughtExceptionHandler
import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;import java.io.StringWriter;import java.lang.Thread.UncaughtExceptionHandler;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Locale;import com.lidroid.xutils.HttpUtils;import com.lidroid.xutils.http.RequestParams;import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;import android.content.Context;import android.content.Intent;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.content.pm.PackageManager.NameNotFoundException;import android.os.Looper;import android.util.Log;import android.widget.Toast;public class CrashHandler implements UncaughtExceptionHandler {public static final String TAG = "CrashHandler";public static final boolean DEBUG = true;private static CrashHandler INSTANCE;private Context mContext;private Thread.UncaughtExceptionHandler mDefaultHandler;private CrashHandler() {}public static CrashHandler getInstance() {if (INSTANCE == null)INSTANCE = new CrashHandler();return INSTANCE;}public void init(Context ctx) {mContext = ctx;mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();Thread.setDefaultUncaughtExceptionHandler(this);}@Overridepublic void uncaughtException(Thread thread, Throwable ex) {if (!handleException(ex) && mDefaultHandler != null) {// 如果用户没有处理则让系统默认的异常处理器来处理mDefaultHandler.uncaughtException(thread, ex);} else {}}private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HHmmss",Locale.CHINA);/** * 保存崩溃异常日志 * * @Title: saveExceptionInfo * @TODO * @since 2015-10-14 * @param ex */private void saveExceptionInfo(Throwable ex) {File filesFile = new File(YuntiTools.LOCAL_EXCEPTION_URL);if (!filesFile.exists() && !filesFile.isDirectory()) {filesFile.mkdir();}File[] files = filesFile.listFiles();for (int i = 0; i < files.length; i++) {if (files[i].getName().contains(".log")) {files[i].delete();}}File file = new File(YuntiTools.LOCAL_EXCEPTION_URL + "/"+ YuntiTools.getUserName(mContext) + "_exit_"+ sdf.format(new Date()) + ".log");try {file.createNewFile();StringWriter sw = new StringWriter();ex.printStackTrace(new PrintWriter(sw, true));PackageManager packageManager = mContext.getPackageManager();// getPackageName()是你当前类的包名,0代表是获取版本信息PackageInfo packInfo;packInfo = packageManager.getPackageInfo(mContext.getPackageName(),0);String version = packInfo.versionName;//获取版本号String str = sw.toString();wirteString(file, "崩溃异常:异常版本" + version + "\n" + str);uploadLog(file);android.os.Process.killProcess(android.os.Process.myPid());System.exit(0);} catch (IOException e) {e.printStackTrace();} catch (NameNotFoundException e) {e.printStackTrace();}}/** * 往文件写入字符串 * * @Title: wirteString * @TODO * @since 2015-10-14 * @param file * @param context */private void wirteString(File file, String context) {try {FileWriter fileWriter = new FileWriter(file);BufferedWriter writer = new BufferedWriter(fileWriter);writer.write(context);writer.close();} catch (IOException e) {e.printStackTrace();}}/** * 上传log文件 * * @param f * log文件 */private void uploadLog(final File f) {RequestParams params = new RequestParams();params.addBodyParameter("logFile", f);HttpUtils http = new HttpUtils();http.send(HttpMethod.POST, URL // 上传日志的接口, params, null);try {Thread.sleep(3000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}f.delete();}// add end/** * 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成. 可以自定义异常处理逻辑 * * @param ex * @return true:如果处理了该异常信息;否则返回false */private boolean handleException(Throwable ex) {if (ex == null) {return true;}saveExceptionInfo(ex);new Thread() {@Overridepublic void run() {Looper.prepare();Toast.makeText(mContext, "程序出错,即将重启", Toast.LENGTH_LONG).show();Looper.loop();}}.start();return true;}}
在application中要注册此handler
public class App extends Application {public void onCreate() {CrashHandler crashHandler = CrashHandler.getInstance();crashHandler.init(getApplicationContext());}}
0 0
- android 通过UncaughtExceptionHandler处理和上传错误日志
- Android 捕获错误日志 UncaughtExceptionHandler
- android 处理程序全局异常和错误,UncaughtExceptionHandler
- android 程序错误处理全局处理 UncaughtExceptionHandler
- Android日志打印与处理 UncaughtExceptionHandler 提交服务器
- Android UncaughtExceptionHandler,捕获错误
- android自定义异常处理与错误日志上传
- android UncaughtExceptionHandler全局异常处理
- UncaughtExceptionHandler定制自己的错误日志系统
- android 通过UncaughtExceptionHandler 捕获RuntimeException,并将捕获到的信息上传到友盟
- Android性能优化之UncaughtExceptionHandler定制自己的错误日志系统
- Android性能优化之UncaughtExceptionHandler定制自己的错误日志系统
- android - 奔溃日志收集,UncaughtExceptionHandler实现
- Android捕获异常处理——UncaughtExceptionHandler
- Android 全局异常处理之UncaughtExceptionHandler
- 使用UncaughtExceptionHandler捕获错误日志,客户端不会崩溃。
- android 收集错误日志 上传服务器
- Android UncaughtExceptionHandler
- 美橙互联主机评测
- NSTimer导致的内存泄露,找了好久的问题
- 用readn与written实现解决粘包问题
- Maven的安装、配置及使用入门
- Linux系统维护监控工具集sysstat详解
- android 通过UncaughtExceptionHandler处理和上传错误日志
- php正则匹配文章中的远程图片地址并下载图片到本地
- 零基础学习hadoop到上手工作线路指导(编程篇)
- 嵌入式系统中看门狗的使用总结
- WINDOW 安装pear
- php中正则表达式基本语法
- socket中的函数遇见EINTR的处理
- Single Number II
- High-dimensional model representation (HDMR)