导语:最近实在是太忙了,没有怎么更新公众号,也没有怎么认真去写一些内容,在这里先给关注我的朋友说一声抱歉,可能在接下来的一段时间,还是很忙,但是我会争取抽空多分享一下技术文章,给大家看,共同进步,也希望有能力的人可以一起出来分享。



我们在做应用开发的时候,需要程序的崩溃信息,来进行bug的修复和版本的更新,每一个应用程序都会有bug,所以都需要在后台纪录这些bug日志,然后上传到服务器,让程序员看,并进行修复。现在也有很多第三方的jar包能实现这种功能,比如友盟统计等,但是终究不如自己写的方便。好了,废话不多说了,现在正是开讲。



第一步:先了解一下两个类Application和UncaughtExceptionHandler



Application:用来管理应用程序的全局状态。在应用程序启动时Application会首先创建,然后才会根据情况来启动相应的Activity和Service。对于未捕获异常的处理器我们也可以在这里实现。



UncaughtExceptionHandler:线程未捕获异常处理器,用来处理未捕获异常。如果程序出现了未捕获异常,默认会弹出系统中强制关闭对话框。我们需要实现此接口,并注册为程序中默认未捕获异常处理。这样当未捕获异常发生时,就可以做一些个性化的异常处理操作。

第二步:线程未捕获异常接口的实现

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.lang.Thread.UncaughtExceptionHandler; public class CrashHandler implements UncaughtExceptionHandler{ private static CrashHandler crashHandler; @Override
public void uncaughtException(Thread thread, Throwable ex) {
// TODO Auto-generated method stub
if (crashHandler != null) {
try {
//将crash log写入文件
FileOutputStream fileOutputStream = new FileOutputStream("/mnt/sdcard/crash_log.txt", true);
PrintStream printStream = new PrintStream(fileOutputStream);
ex.printStackTrace(printStream);
printStream.flush();
printStream.close();
fileOutputStream.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} //设置默认处理器
public void init() {
Thread.setDefaultUncaughtExceptionHandler(this);
} private CrashHandler() {} //单例
public static CrashHandler instance() {
if (crashHandler == null) {
synchronized (crashHandler) {
crashHandler = new CrashHandler();
}
}
return crashHandler;
}
}

第三步:在application中调用异常的捕获功能

import android.app.Application;  

public class MainApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
CrashHandler crashHandler = CrashHandler.getInstance();
crashHandler.init(this);
}
}

第四步:application在清单文件中的注册

application和activity一样都需要在清单文件中进行注册,只不过我们在建项目的时候,开发工具会在项目中自动注册application,而我们自己定义的则需要自己去手动把默认的给替换掉。

<application android:name=".MainApplication"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
...
</application>

讲到这里就介绍完了,如果你把这些代码插入进去了,等你程序再崩溃的时候,就会给你自动记录了,当然上面讲的这些只是给你记录到本地,并存放成文件了,如果想上传到服务器,还请同学们自己动手,把文件进行上传吧!上传文件到服务器我想同学们应该都会吧!



说实话,写一篇文章真的有时候比较耗费精力,如果同学们不嫌弃或者感觉对自己有用,还请大家随手能够转发到朋友圈,让更多自己的朋友受益,也让更多的人来关注,给我写文章的动力。



微信公众号:smart_android
,公众号[非著名程序员]可能是东半球最好的技术分享公众号。每天,每周定时推送一些有关移动开发的原创文章和教程。

Android将应用程序的崩溃信息如何保存到本地文件,并上传服务器的更多相关文章

  1. 优化Recorder H5录音:可边录边转码上传服务器,支持微信提供Android IOS Hybrid App源码

    Recorder H5 GitHub开源库随着支持功能的增多,音频转码处理效率渐渐的跟不上需求了,近期抽时间对音频转码部分进行了升级优化,以支持更多实用的功能. 另外IOS的Hybrid App也完成 ...

  2. 微信小程序 获取用户信息并保存登录状态

    微信小程序 获取用户信息并保存登录状态:http://www.360doc.com/content/18/0124/11/9200790_724662071.shtml

  3. Android中Socket大文件断点上传

    原文:http://blog.csdn.net/shimiso/article/details/8529633 什么是Socket? 所谓Socket通常也称作“套接字”,用于描述IP地址和端口,是一 ...

  4. Android应用开发之使用Socket进行大文件断点上传续传

    http://www.linuxidc.com/Linux/2012-03/55567.htm http://blog.csdn.net/shimiso/article/details/8529633 ...

  5. 【Android】图片(文件)上传的请求分析结构

    怎么在android中上传文件,即怎么用Java向服务器上传文件.上传图片,这是个老问题了,在网上能搜到现成的代码,很多朋友用起来也比较熟了,但是为什么这么写,可能很多朋友并不清楚,这篇文章就来分析一 ...

  6. 如何上传网站程序(文件浏览器上传网页、FileZilla上传网站程序)

    问题场景: 网页制作完成后,程序需上传至虚拟主机. 注意事项: Windows系统的主机请将全部网页文件直接上传到FTP根目录,即 / . Linux系统的主机请将全部网页文件直接上传到 /htdoc ...

  7. LocalResizeIMG前端HTML5本地压缩图片上传,兼容移动设备IOS,android

    LocalResizeIMG前端HTML5本地压缩图片上传,兼容移动设备IOS,android jincon 发表于 2015-02-26 18:31:01 发表在: php开发 localresiz ...

  8. android下大文件分割上传

    由于android自身的原因,对大文件(如影视频文件)的操作很容易造成OOM,即:Dalvik堆内存溢出,利用文件分割将大文件分割为小文件可以解决问题. 文件分割后分多次请求服务. //文件分割上传 ...

  9. Android Http实现文件的上传和下载

    最近做一个项目,其中涉及到文件的上传和下载功能,大家都知道,这个功能实现其实已经烂大街了,遂.直接从网上荡了一堆代码用,结果,发现网上的代码真是良莠不齐,不是写的不全面,就是有问题,于是自己重新整理了 ...

随机推荐

  1. ELK 信息统计分析-1

    Aggregations 格式如下: "aggregations"{ //可以简写为aggs "<aggregation_name>":{ //名称 ...

  2. windows 下安装nginx

    1.首先去官网下载 nginxWindows版本,官网下载:http://nginx.org/en/download.html 选择最新版本,下载到软件包后,解压文件包到指定目录,例如我的目录是D:\ ...

  3. nodejs 导出excel

    nodejs 对查询数据生成excel并下载,采用方式先生成本excel文件,然后再下载:通过比较采用excel-export插件代码如下: excel.js代码: var extend = requ ...

  4. [转载]UEditor报错TypeError: me.body is undefined

    本文转载来自:UEditor报错TypeError: me.body is undefined 今天在使用UEditor的setContent的时候报错,报错代码如下 TypeError: me.bo ...

  5. Codeforces Round #254 DZY Loves Colors

    题意:输入n, m ; 有n给位置, 初始时第i个位置的color为i, colorfulness为0.      有m次操作,一种是把成段的区域color更新为x, 对于更新的区域,每个位置(令第i ...

  6. Same Tree

    Given two binary trees, write a function to check if they are equal or not. Two binary trees are con ...

  7. LAMP编译参数查看

    Linux下查看Nginx.Napache.MySQL.PHP的编译参数的命令如下: 1.nginx编译参数:#/usr/local/nginx/sbin/nginx -V2.apache编译参数:# ...

  8. JavaWeb学习之Servlet(一)----MyEclipse及Tomcat的配置

    [声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4134921.html [开发环境] 物理机版本:Win 7旗舰版(64位 ...

  9. AC日记——津津的储蓄计划 P1089 (水!)

    题目描述 津津的零花钱一直都是自己管理.每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同. 为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里 ...

  10. window7 右键菜单显示-》在此处打开命令窗口

    window7 右键菜单显示->在此处打开命令窗口: 注册表中: HKEY_CLASSES_ROOT\Directory\Background\shell\cmd下将[Extended]重命名或 ...