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);
}
@Override
public 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() {
@Override
public 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{
@Override
public 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>
分享到:
相关推荐
Android捕获全局异常并写日志保存到sd卡,捕获异常消息后输出这个消息,可避免APP强制退出,抛出NullPointException玩玩哈,捕获全局异常是因为有的异常我们捕获不到,捕获时我们采用同步方法,以免单例多线程环境下...
介绍了ANDROID 完美退出APP的实例代码,有需要的朋友可以参考一下
主要介绍了Android编程实现捕获程序异常退出时的错误log信息功能,结合实例形式分析了Android异常信息捕获与日志操作相关实现技巧,需要的朋友可以参考下
下载后,先看readme.txt: 1.Android 自动化测试1:启动app的默认...4.Android 自动化测试4:最后,绘制笑脸,关闭应用,退出app,断开连接 简单粗暴的演示自动化在native app上面的执行效果,并在最后绘制了一个笑脸。
2、捕获崩溃异常,保存错误日志,并重启应用 public class HKBaseApplication extends Application { // activity对象列表,用于activity统一管理 private List<Activity> activityList; // 异常捕获 protected ...
Crash是指由于未处理的异常或者信号导致的意外退出,使得Android应用崩溃。当应用崩溃时,Android会杀死应用的进程并显示一个对话框来告知用户,他的应用由于未知的意外而停止了。当然现在的国内厂商自定义的系统...
思路:Android中捕获用户按键是在onKeyDown方法中,只需要判断用户按键是否是KEYCODE_BACK即后退键即可,剩下的即为判断两次点击BACK键时间间隔问题了 第一种实现方式 package com.example.clickexittest; ...
若app因为不明原因崩溃退出,1秒后会重启程序。若app因为不明原因崩溃退出,1秒后会重启程序。
思路:Android中捕获用户按键是在onKeyDown方法中,只需要判断用户按键是否是KEYCODE_BACK即后退键即可,剩下的即为判断两次点击BACK键时间间隔问题了。 第一种实现方式: package com.example.clickexittest; ...
|--android 模拟器错误 |--android 横竖屏切换 |--android 获取mac地址 |--android 获取sd卡状态 |--android 设置apn |--android 调节屏幕亮度 |--android 资源uri |--android 还原短信 |--android 重启 |--android...
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
文件操作,数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java...