android捕获全局异常,CrashHandler
2016-03-23 16:18
387 查看
原文地址:http://blog.csdn.net/luck_apple/article/details/7768064
[java]
view plain
copy
package com.numob.david.util;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.Thread.UncaughtExceptionHandler;
import java.util.Date;
import android.os.Environment;
import android.util.Log;
/**
* 全局处理异常.
*
*/
public class CrashHandler implements UncaughtExceptionHandler {
/** CrashHandler实例 */
private static CrashHandler instance;
/** 获取CrashHandler实例 ,单例模式*/
public static CrashHandler getInstance() {
if (instance == null) {
instance = new CrashHandler();
}
return instance;
}
@Override
public void uncaughtException(Thread arg0, Throwable arg1) {
// ScreenManager.getScreenManager().popActivity(Pay.activity);
// arg0.stop();
// arg0.destroy();
String logdir ;
if(Environment.getExternalStorageDirectory()!=null){
logdir = Environment.getExternalStorageDirectory().getAbsolutePath()
+ File.separator + "snda"+File.separator+"log" ;
File file = new File(logdir);
boolean mkSuccess;
if (!file.isDirectory()) {
mkSuccess = file.mkdirs();
if (!mkSuccess) {
mkSuccess = file.mkdirs();
}
}
try {
FileWriter fw = new FileWriter(logdir+File.separator+"error.log",true);
fw.write(new Date()+"\n");
StackTraceElement[] stackTrace = arg1.getStackTrace();
fw.write(arg1.getMessage() + "\n");
for (int i = 0; i < stackTrace.length; i++) {
fw.write("file:" + stackTrace[i].getFileName() + " class:" + stackTrace[i].getClassName()
+ " method:" + stackTrace[i].getMethodName() + " line:" + stackTrace[i].getLineNumber()
+ "\n");
}
fw.write("\n");
fw.close();
} catch (IOException e) {
Log.e("crash handler", "load file failed...", e.getCause());
}
}
arg1.printStackTrace();
android.os.Process.killProcess(android.os.Process.myPid());
}
}
[java]
view plain
copy
Activity或是Application中加入这样的代码 :
[java]
view plain
copy
CrashHandler crashHandler = CrashHandler.getInstance();
crashHandler.init(getApplicationContext());
第二种方法:
package com.example.chl.myapplication;
import android.app.Application;
import android.os.SystemClock;
import android.util.Log;
/**
* Created by chl on 16-4-20.
*/
public class MyAppliction extends Application implements Thread.UncaughtExceptionHandler{
@Override
public void onCreate() {
super.onCreate();
Thread.setDefaultUncaughtExceptionHandler(this);
}
@Override
public void uncaughtException(Thread thread, Throwable ex) {
Log.d("exception","程序休息下。。。。");
SystemClock.sleep(2000);
android.os.Process.killProcess(android.os.Process.myPid());
}
}
[java]
view plain
copy
package com.numob.david.util;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.Thread.UncaughtExceptionHandler;
import java.util.Date;
import android.os.Environment;
import android.util.Log;
/**
* 全局处理异常.
*
*/
public class CrashHandler implements UncaughtExceptionHandler {
/** CrashHandler实例 */
private static CrashHandler instance;
/** 获取CrashHandler实例 ,单例模式*/
public static CrashHandler getInstance() {
if (instance == null) {
instance = new CrashHandler();
}
return instance;
}
@Override
public void uncaughtException(Thread arg0, Throwable arg1) {
// ScreenManager.getScreenManager().popActivity(Pay.activity);
// arg0.stop();
// arg0.destroy();
String logdir ;
if(Environment.getExternalStorageDirectory()!=null){
logdir = Environment.getExternalStorageDirectory().getAbsolutePath()
+ File.separator + "snda"+File.separator+"log" ;
File file = new File(logdir);
boolean mkSuccess;
if (!file.isDirectory()) {
mkSuccess = file.mkdirs();
if (!mkSuccess) {
mkSuccess = file.mkdirs();
}
}
try {
FileWriter fw = new FileWriter(logdir+File.separator+"error.log",true);
fw.write(new Date()+"\n");
StackTraceElement[] stackTrace = arg1.getStackTrace();
fw.write(arg1.getMessage() + "\n");
for (int i = 0; i < stackTrace.length; i++) {
fw.write("file:" + stackTrace[i].getFileName() + " class:" + stackTrace[i].getClassName()
+ " method:" + stackTrace[i].getMethodName() + " line:" + stackTrace[i].getLineNumber()
+ "\n");
}
fw.write("\n");
fw.close();
} catch (IOException e) {
Log.e("crash handler", "load file failed...", e.getCause());
}
}
arg1.printStackTrace();
android.os.Process.killProcess(android.os.Process.myPid());
}
}
[java]
view plain
copy
Activity或是Application中加入这样的代码 :
[java]
view plain
copy
CrashHandler crashHandler = CrashHandler.getInstance();
crashHandler.init(getApplicationContext());
第二种方法:
package com.example.chl.myapplication;
import android.app.Application;
import android.os.SystemClock;
import android.util.Log;
/**
* Created by chl on 16-4-20.
*/
public class MyAppliction extends Application implements Thread.UncaughtExceptionHandler{
@Override
public void onCreate() {
super.onCreate();
Thread.setDefaultUncaughtExceptionHandler(this);
}
@Override
public void uncaughtException(Thread thread, Throwable ex) {
Log.d("exception","程序休息下。。。。");
SystemClock.sleep(2000);
android.os.Process.killProcess(android.os.Process.myPid());
}
}
相关文章推荐
- Ruby中的异常处理代码编写示例
- MySQL抛出Incorrect string value异常分析
- 浅谈C#中简单的异常引发与处理操作
- 详解C#编程中异常的创建和引发以及异常处理
- 详解JavaScript中的异常处理方法
- java程序中的延时加载异常及解决方案
- 解析Java异常的栈轨迹及其相关方法
- .NET(C#):Emit创建异常处理的方法
- windows7服务器上weblogic启动失败异常解决方法
- 有关ajax的error与后台的异常问题解决
- 深入探讨JAVA中的异常与错误处理
- GO语言异常处理机制panic和recover分析
- 浅谈JAVA 异常对于性能的影响
- 解析C++编程中的bad_cast异常
- Java中的异常测试框架JUnit使用上手指南
- C++ 异常处理 catch(...)介绍
- php中异常处理方法小结
- PHP中异常处理的一些方法整理
- 浅析Lua编程中的异常处理
- Perl中捕获警告信息、异常信息并写入日志详解