付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android之LogDog
在写Android程序时,经常碰到在模拟器和调试器中无法捕捉的exception。有时自己运行好好的程序到了其他机器上就出现了问题。虽然GooglePlay有错误堆栈上传功能,但是没有办法把整个运行的过程记录下来。为此我写了一个LogDog类来试图解决这个问题。
importjava.io.BufferedWriter;
importjava.io.File;
importjava.io.FileWriter;
importjava.io.IOException;
importjava.io.PrintWriter;
importjava.lang.Thread.UncaughtExceptionHandler;
importjava.sql.Date;
importjava.text.SimpleDateFormat;
importjava.util.HashSet;
importandroid.content.Context;
importandroid.content.pm.PackageInfo;
importandroid.content.pm.PackageManager;
importandroid.content.pm.PackageManager.NameNotFoundException;
importandroid.os.Build;
importandroid.os.Environment;
importandroid.os.Looper;
//importandroid.util.Log;
importandroid.util.Log;
publicclassLogDogimplementsUncaughtExceptionHandler{
publicstaticString TAG="LogDog";
privatestaticHashSet _tags=newHashSet();
privatestaticboolean _debug=false;
static{
//addtagstobecaptured
_tags.add(PDFMaster.TAG);
_tags.add(RecentlyUsedActivity.TAG);
_tags.add(DB.TAG);
}
publicstaticLogDoginstance(){
return_instance;
}
publicstaticvoidi(Stringtag,Stringmessage){
if(_debug){
Log.i(tag,message);
return;
}
PrintWriterwriter=_instance.getWriter();
if(writer!=null&&_tags.contains(tag)){
_instance._writer.println("i:"+tag+":"+message);
}
}
publicstaticvoide(Stringtag,Stringmessage){
if(_debug){
Log.i(tag,message);
return;
}
PrintWriterwriter=_instance.getWriter();
if(writer!=null&&_tags.contains(tag)){
_instance._writer.println("e"+tag+":"+message);
}
}
publicstaticvoidw(Stringtag,Stringmessage){
if(_debug){
Log.i(tag,message);
return;
}
PrintWriterwriter=_instance.getWriter();
if(writer!=null&&_tags.contains(tag)){
_instance._writer.println("w"+tag+":"+message);
}
}
publicvoidinit(Contextcontext){
_context=context;
_fileName=_context.getString(R.string.app_name)+".log";
_defaultHandler=Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(this);
}
publicvoidclose(){
if(_writer!=null){
_writer.close();
_writer=null;
}
}
//private
privatestaticLogDog _instance=newLogDog();
privatestaticfinalString PATH=
Environment.getExternalStorageDirectory().getPath()+"/log";
privateContext _context;
privateString _fileName;
privateThread.UncaughtExceptionHandler _defaultHandler;
privatePrintWriter _writer=null;
privateLogDog(){
}
privatePrintWritergetWriter(){
if(_writer!=null)
return_writer;
//checkifwehaveSDcard
if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
//Log.w(TAG,"sdcardunmounted,skipdumpexception");
returnnull;
}
Filedir=newFile(PATH);
if(!dir.exists()){
dir.mkdirs();
}
Filefile=newFile(PATH+"/"+_fileName);
try{
_writer=newPrintWriter(newBufferedWriter(newFileWriter(file)));
}catch(IOExceptione){
//Log.e(TAG,"Failedtoopen"+PATH+"/"+FILE_NAME);
_writer=null;
}
return_writer;
}
@Override
publicvoiduncaughtException(Threadthread,Throwableex){
//firstdisplayatoastmessage
newThread(){
@Override
publicvoidrun(){
Looper.prepare();
PDFMarkerApp.instance().showToast("Sorryforthetrouble,dumpinguncaughtexeptiontoSDcard");
}
}.start();
try{
dump(ex);
}catch(Exceptione){
//Log.e(TAG,"Failedtodumpbecause"+e.getMessage());
e.printStackTrace();
}
if(_defaultHandler!=null){
_defaultHandler.uncaughtException(thread,ex);
}else{
//sleepsothetoastcanhavetimetodisplay
try{
Thread.sleep(3000);
}catch(InterruptedExceptione){
}
android.os.Process.killProcess(android.os.Process.myPid());
}
}
privatevoiddump(Throwableex)throwsIOException,NameNotFoundException{
PrintWriterwriter=_instance.getWriter();
if(writer==null)
return;
longcurrent=System.currentTimeMillis();
Stringtime=newSimpleDateFormat("yyyyMMdd.HHmmss").format(newDate(current));
_writer.println(time);
PackageManagerpm=_context.getPackageManager();
PackageInfopi=pm.getPackageInfo(_context.getPackageName(),PackageManager.GET_ACTIVITIES);
_writer.print("AppVersion:");
_writer.print(pi.versionName);
_writer.print('_');
_writer.println(pi.versionCode);
_writer.print("OSVersion:");
_writer.print(Build.VERSION.RELEASE);
_writer.print("_");
_writer.println(Build.VERSION.SDK_INT);
_writer.print("Vendor:");
_writer.println(Build.MANUFACTURER);
_writer.print("Model:");
_writer.println(Build.MODEL);
_writer.print("CPUABI:");
_writer.println(Build.CPU_ABI);
_writer.println();
ex.printStackTrace(_writer);
close();
Filefile=newFil
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 未来职业发展规划概述
- 《喜看稻菽千重浪 记首届国家最高科技奖获得者袁隆平》袁隆平的农业科技推广的策略课件
- 三级锅炉考试题及答案
- 学校网络安全与意识形态安全管理方案
- 药品不良事件监测试题及答案
- 广东省汕头市龙湖区2026年中考一模英语试题附答案
- 药品检验三基三严考试题库及答案
- 药品生产企业法律法规及质量管理规范岗前培训试题及答案
- 医疗废物收集试题及答案
- 网络助学平台考试试题及答案
- 重庆市巴渝学校2023-2024学年九年级下学期第一次月考物理试卷
- 建设规范项目管理规范实施手册新课件
- 讲授心理健康知识讲座
- 商业银行公司治理评价表
- 常用Y系列电机型号参数表
- 葫芦岛九江220千伏输变电工程环评报告
- 2022年浙江纺织服装职业技术学院单招职业适应性测试试题及答案解析
- GB/T 26514-2011互叶白千层(精)油,松油烯-4-醇型茶树(精)油
- GA/T 1028.4-2017机动车驾驶人考试系统通用技术条件第4部分:道路驾驶技能考试系统
- 除灰点检技术标准
- 04第四章-火箭导弹的气动布局
评论
0/150
提交评论