每个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="http://schemas.android.com/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();}});}}


更多相关文章

  1. android部分介绍
  2. Android(安卓)RecyclerView异步更新数据导致的崩溃问题
  3. Android数据储存——SharedPreferences储存
  4. Android(安卓)studio 升级Android(安卓)Support Repository(46.0
  5. Android(安卓)Property Animation 介绍(一)
  6. ArcGIS for Android示例解析之GP服务调用-----ViewShed
  7. Android(安卓)P版本编译出现报错ninja: build stopped: subcomma
  8. Inflater与findViewById()区别
  9. Android第十七课 Jni string空串跨模块使用崩溃注意事项

随机推荐

  1. 解决'keytool' is not recognized as an
  2. 蒙板引导页面
  3. Android(安卓)Studio添加so库
  4. 【Android】虚拟环绕声
  5. android取得系统高度,标题栏和状态高度
  6. Android(安卓)Studio常见问题--uses-sdk:
  7. delphi XE 5 Android(安卓)真机调试简易
  8. android 4.0 USB Camera实例(二)应用层
  9. Titanium Mobile 编写一次就可以完成Andr
  10. how to use data extraction API for jav