1.创建获取日志信息的类AppLogHandler,该类的功能是捕获导致应用程序意外退出的错误的日志信息,这里写的是一个错误保存一个log文件,保存到SD卡对应的目录下。代码如下:
package com.ryan.test.crash;import java.io.File;import java.io.FileOutputStream;import java.lang.Thread.UncaughtExceptionHandler;import android.content.Context;import android.os.Environment;import android.os.Looper;public class AppLogHandler implements UncaughtExceptionHandler {public static final boolean DEBUG = true;public static final String AGR_LOG_DIRECOTORY = "agrlog";private Thread.UncaughtExceptionHandler mDefaultHandler;private static AppLogHandler instance;private AppLogHandler() {}public static AppLogHandler getInstance() {if (instance == null) {instance = new AppLogHandler();}return instance;}public void init(Context context) {mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();Thread.setDefaultUncaughtExceptionHandler(this);}@Overridepublic void uncaughtException(Thread thread, Throwable ex) {if (!handleException(ex) && mDefaultHandler != null) {mDefaultHandler.uncaughtException(thread, ex);} else {try {Thread.sleep(3000);} catch (Exception e) {e.printStackTrace();}android.os.Process.killProcess(android.os.Process.myPid());System.exit(10);}}private boolean handleException(final Throwable ex) {if (DEBUG) {if (ex == null) {return false;}final StackTraceElement[] stack = ex.getStackTrace();final String message = ex.getMessage();new Thread() {@Overridepublic void run() {Looper.prepare();createLogDirectory();String fileName = AGR_LOG_DIRECOTORY + "/crash-" + System.currentTimeMillis() + ".log";File file = new File(Environment.getExternalStorageDirectory(), fileName);try {FileOutputStream fos = new FileOutputStream(file, true);fos.write(message.getBytes());for (int i = 0; i < stack.length; i++) {fos.write(stack[i].toString().getBytes());}fos.flush();fos.close();} catch (Exception e) {}Looper.loop();}}.start();}return false;}private void createLogDirectory() {File file = new File(Environment.getExternalStorageDirectory(), AGR_LOG_DIRECOTORY);try {if (!file.exists() || !file.isDirectory()) {file.mkdir();}} catch (Exception e) {e.printStackTrace();}}}

2.为了读取Logcat的信息并保存到SD卡中,必须添加对应的权限:
<uses-permission android:name="android.permission.READ_LOGS" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

3.新建MyApplication类继承自Application,在应用启动时开启对导致程序意外退出的错误的捕获:
import com.ryan.test.crash.AppLogHandler;import android.app.Application;public class MyApplication extends Application{@Overridepublic void onCreate() {super.onCreate();AppLogHandler appLogHandler = AppLogHandler.getInstance();appLogHandler.init(getApplicationContext());}}

4.为了使MyApplication生效,必须修改AndroidMenifest.xml文件:
 <application        android:name="com.ryan.test.MyApplication"        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@android:style/Theme.NoTitleBar">       <!-- 省略其他信息 --> </application>

更多相关文章

  1. 捕获TextView超链接
  2. Android之屏幕方向改变以及onConfigurationChanged事件
  3. Android(安卓)INSTALL_FAILED_ACWF_INCOMPATIBLE
  4. Android进阶篇-百度地图获取地理信息
  5. Android错误提示:IMGSRV::0: gralloc_module_unmap: find buffer
  6. Android(安卓)Studio Error—Gradle: 错误:编码 GBK 的不可映射
  7. android在ubuntu桌面系统下编译可能的错误和解决方法
  8. Android(安卓)log日志信息获取
  9. Android四大组件安全问题

随机推荐

  1. android 7.0系统解决拍照的问题android.o
  2. 使用Javaweb开发的WebService部署到Tomca
  3. Android(安卓)复制和粘贴功能
  4. Android模拟用户点击的实现方法
  5. Android(安卓)经验: 本地 5555 端口会被
  6. android api包简要介绍
  7. Android(安卓)Studio打包以及签名
  8. Android中的颜色设置
  9. android framework集成第三方jar包
  10. 在使用ListFragment的setEmptyText时报ja