失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > android 记录崩溃日志

android 记录崩溃日志

时间:2020-07-09 21:14:39

相关推荐

android 记录崩溃日志

独角兽企业重金招聘Python工程师标准>>>

每个android应用都是由一个Application和多个activity或者server构成.应用启动时,会首先启动Application.在Application的onCreate方法中调用

Thread.setDefaultUncaughtExceptionHandler(handler);

就可以捕获导致应用崩溃的错误信息了.

首先应用要有读写sd卡权限

<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

自定义一个Application,并在AndroidManifest.xml中使用这个Application

<applicationandroid:name=".MyApplication">...</application>

publicclassMyApplicationextendsApplication{privatestaticfinalStringLOG_DIR=Environment.getExternalStorageDirectory().getAbsolutePath()+"/oldfeel/log/";privatestaticfinalStringLOG_NAME=getCurrentDateString()+".txt";privateArrayList<Activity>list=newArrayList<Activity>();@OverridepublicvoidonCreate(){super.onCreate();Thread.setDefaultUncaughtExceptionHandler(handler);}UncaughtExceptionHandlerhandler=newUncaughtExceptionHandler(){@OverridepublicvoiduncaughtException(Threadthread,Throwableex){writeErrorLog(ex);Intentintent=newIntent(getApplicationContext(),CollapseActivity.class);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent);exit();}};/***打印错误日志**@paramex*/protectedvoidwriteErrorLog(Throwableex){Stringinfo=null;ByteArrayOutputStreambaos=null;PrintStreamprintStream=null;try{baos=newByteArrayOutputStream();printStream=newPrintStream(baos);ex.printStackTrace(printStream);byte[]data=baos.toByteArray();info=newString(data);data=null;}catch(Exceptione){e.printStackTrace();}finally{try{if(printStream!=null){printStream.close();}if(baos!=null){baos.close();}}catch(Exceptione){e.printStackTrace();}}Log.d("example","崩溃信息\n"+info);Filedir=newFile(LOG_DIR);if(!dir.exists()){dir.mkdirs();}Filefile=newFile(dir,LOG_NAME);try{FileOutputStreamfileOutputStream=newFileOutputStream(file,true);fileOutputStream.write(info.getBytes());fileOutputStream.close();}catch(FileNotFoundExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}/***获取当前日期**@return*/privatestaticStringgetCurrentDateString(){Stringresult=null;SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd",Locale.getDefault());DatenowDate=newDate();result=sdf.format(nowDate);returnresult;}/***Activity关闭时,删除Activity列表中的Activity对象*/publicvoidremoveActivity(Activitya){list.remove(a);}/***向Activity列表中添加Activity对象*/publicvoidaddActivity(Activitya){list.add(a);}/***关闭Activity列表中的所有Activity*/publicvoidexit(){for(Activityactivity:list){if(null!=activity){activity.finish();}}//杀死该应用进程android.os.Process.killProcess(android.os.Process.myPid());}}

系统错误后要还是要提示用户系统错误.这个是崩溃activity,

<activityandroid:name="com.example.test.CollapseActivity"android:theme="@android:style/Theme.Holo.Dialog.MinWidth"></activity>

<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:orientation="horizontal"><Buttonandroid:id="@+id/collapse_restart"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1.0"android:text="重启应用"/><Buttonandroid:id="@+id/collapse_exit"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1.0"android:text="退出应用"/></LinearLayout>

publicclassCollapseActivityextendsActivity{privateButtonbtnRestart,btnExit;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.collapse_activity);setTitle("应用崩溃了");btnRestart=(Button)findViewById(R.id.collapse_restart);btnExit=(Button)findViewById(R.id.collapse_exit);btnRestart.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){Intentintent=newIntent(getApplicationContext(),MainActivity.class);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent);finish();}});btnExit.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){finish();}});}}

如果觉得《android 记录崩溃日志》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。