首页 技术 正文
技术 2022年11月7日
0 收藏 886 点赞 940 浏览 2385 个字

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

我们在做应用开发的时候,需要程序的崩溃信息,来进行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
,公众号[非著名程序员]可能是东半球最好的技术分享公众号。每天,每周定时推送一些有关移动开发的原创文章和教程。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,994
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,507
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,350
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,135
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,768
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,846