全局异常捕获
程序员文章站
2022-04-21 17:55:54
...
java代码:
package com.gy.my;
import android.content.Context;
import android.os.Looper;
import android.util.Log;
import android.widget.Toast;
public class CrashHandler implements Thread.UncaughtExceptionHandler {
public static final String TAG="CrashHandler";
private static CrashHandler mInstance;
//系统默认UncaughtExceptionHandler
private Thread.UncaughtExceptionHandler mDefaultHandler;
private Context mContext;
//*获取CrashHandler实例
public static synchronized CrashHandler getInstance() {
if (null == mInstance) {
mInstance = new CrashHandler();
}
return mInstance;
}
public void init(Context context) {
mContext = context;
mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
//设置该CrashHandler为系统默认的
Thread.setDefaultUncaughtExceptionHandler(this);
}
@Override
public void uncaughtException(Thread t, Throwable e) {
//自己处理
if (!handleException(e) && mDefaultHandler != null) {
//如果自己没处理交给系统处理
mDefaultHandler.uncaughtException(t, e);
} else {
try {//延迟3秒杀进程
Thread.sleep(2000);
} catch (InterruptedException es) {
Log.e(TAG, "error : ", es);
}
}
}
/**
* 收集错误信息.发送到服务器
*
* @return 处理了该异常返回true, 否则false
*/
private boolean handleException(Throwable ex) {
if (ex == null) {
return false;
}
//添加自定义信息
addCustomInfo();
//使用Toast来显示异常信息
new Thread() {
@Override
public void run() {
Looper.prepare();
//在此处处理出现异常的情况
Toast.makeText(mContext, "程序开小差了呢..", Toast.LENGTH_SHORT).show();
Looper.loop();
}
}.start();
return true;
}
/**
* 添加自定义参数
*/
private void addCustomInfo() {
Log.i(TAG, "addCustomInfo: 程序出错了...");
}
}
MyApp.java
package com.gy.my.app;
import android.app.Application;
import com.gy.my.CrashHandler;
import com.umeng.commonsdk.UMConfigure;
import com.umeng.socialize.PlatformConfig;
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
CrashHandler.getInstance().init(this);//全局异常捕获
}
}
最后别忘了在清单文件中注册Myapp
下一篇: 全局异常捕获
推荐阅读
-
Node.js 全局对象
-
Android Studio 断网异常
-
mybaits非配置原因,导致SqlSession was not registered for synchronization异常
-
PHP的全局错误处理详解,php全局详解
-
基于Vue全局组件与局部组件的区别说明
-
PHP异常Parse error: syntax error, unexpected T_VAR错误
-
php中的超级全局变量有哪些
-
php获取jquery ajax传递的值,在php中如何把这个值设置为全局变量
-
使用unset()时出现的异常如何解决
-
在dreamweaver中连接mysql数据,出现http500异常