【移动应用开发技术】Android 之 LogDog_第1页
【移动应用开发技术】Android 之 LogDog_第2页
【移动应用开发技术】Android 之 LogDog_第3页
【移动应用开发技术】Android 之 LogDog_第4页
【移动应用开发技术】Android 之 LogDog_第5页
免费预览已结束,剩余2页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论