ggq 16:02:40
App
CrashHandler
ggq 16:03:21
package com.example.ggq.myapplication;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Looper;
import android.text.format.Time;
import android.util.Log;
import android.view.Gravity;
import android.widget.Toast;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.Properties;
import java.util.TreeSet;
public class CrashHandler implements Thread.UncaughtExceptionHandler{
public static final String TAG = "CrashHandler";
public static final boolean DEBUG = true;
private Thread.UncaughtExceptionHandler mDefaultHandler;
private static CrashHandler INSTANCE;
private Context mContext;
private static final String CRASH_REPORTER_EXTENSION = ".cr";
private static Object syncRoot = new Object();
private CrashHandler() {}
/** 获取CrashHandler实例 ,单例模式*/
public static CrashHandler getInstance() {
// 防止多线程访问安全,这里使用了双重锁
if (INSTANCE == null) {
synchronized (syncRoot) {
if (INSTANCE == null) {
INSTANCE = new CrashHandler();
}
}
}
return INSTANCE;
}
public void init(Context ctx) {
mContext = ctx;
mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(this);
}
/**
* 当UncaughtException发生时会转入该函数来处理
*/
@Override
public void uncaughtException(Thread thread, Throwable ex) {
if (!handleException(ex) && mDefaultHandler != null) {
//如果用户没有处理则让系统默认的异常处理器来处理
mDefaultHandler.uncaughtException(thread, ex);
} else {
//Sleep一会后结束程序
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
Log.e(TAG, "Error : ", e);
}
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(10);
}
}
private boolean handleException(Throwable ex) {
if (ex == null) {
Log.w(TAG, "handleException --- ex==null");
return true;
}
final String msg = ex.getLocalizedMessage();
if(msg == null) {
return false;
}
//使用Toast来显示异常信息
new Thread() {
@Override
public void run() {
Looper.prepare();
if(DEBUG){
Log.d(TAG, "异常信息->"+msg);
Toast toast = Toast.makeText(mContext, "报错了..." + msg,Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
Looper.loop();
}
}.start();
return true;
}
}
///////////////////////////////////////////////////App
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
// 异常处理,不需要处理时注释掉这两句即可!
CrashHandler crashHandler = CrashHandler.getInstance();
// 注册crashHandler
crashHandler.init(getApplicationContext());
}
}
异常捕获类and app里注册
猜你喜欢
转载自blog.csdn.net/weixin_42535797/article/details/82789005
今日推荐
周排行