在做项目时,经常会把错误利用异常抛出去,这样在开发时就可以通过手机抛出的异常排查错误。但是当程序开发完毕,版本稳定,需要上线时,为了避免抛出异常影响用户感受,可以用uncaughtexceptionhandler捕获全局异常,对异常做出处理。比如我们可以获取到抛出异常的时间、手机的硬件信息、错误的堆栈信息,然后将获取到的所有的信息发送到服务器中,也可以发送到指定的邮件中,以便及时修改bug。
示例:
自定义异常类实现uncaughtexceptionhandler接口,当某个页面出现异常就会调用uncaughtexception这个方法,我们可以在这个方法中获取异常信息、时间等,然后将获取到的信息发送到我们指定的服务器
复制代码代码如下:
publicclassmycrashhandlerimplementsuncaughtexceptionhandler{
//需求是整个应用程序只有一个mycrash-handler
privatestaticmycrashhandlermycrashhandler;
privatecontextcontext;
privatedoubanserviceservice;
privatesimpledateformatdataformat=newsimpledateformat("yyyy-mm-dd-hh-mm-ss");
//1.私有化构造方法
privatemycrashhandler(){
}
publicstaticsynchronizedmycrashhandlergetinstance(){
if(mycrashhandler!=null){
returnmycrashhandler;
}else{
mycrashhandler=newmycrashhandler();
returnmycrashhandler;
}
}
publicvoidinit(contextcontext,doubanserviceservice){
this.context=context;
this.service=service;
}
publicvoiduncaughtexception(threadarg0,throwablearg1){
system.out.println("程序挂掉了");
//1.获取当前程序的版本号.版本的id
stringversioninfo=getversioninfo();
//2.获取手机的硬件信息.
stringmobileinfo=getmobileinfo();
//3.把错误的堆栈信息获取出来
stringerrorinfo=geterrorinfo(arg1);
//4.把所有的信息还有信息对应的时间提交到服务器
try{
service.createnote(newplaintextconstruct(dataformat.format(newdate())),
newplaintextconstruct(versioninfo+mobileinfo+errorinfo),"public","yes");
}catch(exceptione){
e.printstacktrace();
}
//干掉当前的程序
android.os.process.killprocess(android.os.process.mypid());
}
privatestringgeterrorinfo(throwablearg1){
writerwriter=newstringwriter();
printwriterpw=newprintwriter(writer);
arg1.printstacktrace(pw);
pw.close();
stringerror=writer.tostring();
returnerror;
}
privatestringgetmobileinfo(){
stringbuffersb=newstringbuffer();
//通过反*获取系统的硬件信息
try{
field[]fields=build.class.getdeclaredfields();
for(fieldfield:fields){
//*反*,获取私有的信息
field.setaccessible(true);
stringname=field.getname();
stringvalue=field.get(null).tostring();
sb.append(name+"="+value);
sb.append("n");
}
}catch(exceptione){
e.printstacktrace();
}
returnsb.tostring();
}
privatestringgetversioninfo(){
try{
packagemanagerpm=context.getpackagemanager();
packageinfoinfo=pm.getpackageinfo(context.getpackagename(),0);
returninfo.versionname;
}catch(exceptione){
e.printstacktrace();
return"版本号未知";
}
}
}
创建一个application实例将mycrashhandler注册到整个应用程序上,创建出服务并进行传递:
复制代码代码如下:
publicclassdoubanapplicationextendsapplication{
publicnoteentryentry;
@override
publicvoidoncreate(){
super.oncreate();
stringapikey="0fab7f9aa21f39cd2f027ecfe65dad67";
stringsecret="87fc1c5e99bfa5b3";
//获取到service
doubanservicemyservice=newdoubanservice("我的小豆豆",apikey,
secret);
myservice.setaccesstoken("1fa4e5be0f808a0b5eeeb13a2e819e21","56a622c1138dbfce");
mycrashhandlerhandler=mycrashhandler.getinstance();
handler.init(getapplicationcontext(),myservice);
thread.setdefaultuncaughtexceptionhandler(handler);
}
}
本文介绍使用powershell读取系统日志,可以按日志名称、日志类型、时间等多个因素进行筛选。powershell中提供了一个叫get-eventlog的cmdlet,使用它可以读取系统日志。运行一下这个get-eventlog的cmdl...
摘要:本文详细描述了自动转报系统数据库进程异常的现象及处置过程,总结了类似故障的处理方法及预防措施。关键词:自动转报系统;数据库*作处理进程dmhs_mon;压报;2010年,*区管中心从*民航总局航管科技公司引进了dmhs—h大型电报...
last-a把从何处登入系统的主机名称或ip地址,显示在最后一行。-d指定记录文件。指定记录文件。将ip地址转换成主机名称。-f<记录文件>指定记录文件。-n<显示列数>或-<显示列数>设置列出名单的显示...
先生/女士您好:我在网上看到贵公司的招聘信息,我对android系统研发实习生职位非常有兴趣,特来应聘。对照公司及职位的要求,我的情况简述如下:1、*理工大学电子工程系研究生在读,研二,已获导师许可,每周可到职3天,能够保障连续6个月的实...
在linux系统中,有三个主要的日志子系统:连接时间日志--由多个程序执行,把纪录写入到/var/log/wtmp和/var/run/utmp,login等程序更新wtmp和utmp文件,使系统管理员能够跟踪谁在何时登录到系统。进程统计--...
班主任岗位培训心得体会总结08-04
浪漫爱情箴言09-03
爱我中华,放飞明天作文850字10-13
标准的辞职报告格式参考11-09
活泼的小兔子作文03-09
咫尺温柔02-25
浅谈公路路基病害的危害及其防治07-13
幼儿园开学讲话08-17
最新个人工作总结开头范文08-28
关于寒假的心得体会范文5篇09-08
恐龙来临日记09-14
汽车改变了生活的五年级作文400字09-17
龟兔和好了小学作文08-22
我的端午节中学生作文10-02
西式婚礼主持词开场白3篇09-30