您的位置:首页 > 游戏 > 游戏 > 乌鲁木齐微信公众号定制_vi设计公司平台哪个好_2023年7月疫情还会严重吗_如何注册域名网站

乌鲁木齐微信公众号定制_vi设计公司平台哪个好_2023年7月疫情还会严重吗_如何注册域名网站

2024/11/18 15:24:10 来源:https://blog.csdn.net/qq_43358469/article/details/142209624  浏览:    关键词:乌鲁木齐微信公众号定制_vi设计公司平台哪个好_2023年7月疫情还会严重吗_如何注册域名网站
乌鲁木齐微信公众号定制_vi设计公司平台哪个好_2023年7月疫情还会严重吗_如何注册域名网站
需求

项目出现异常问题,获取崩溃信息

实现

定义一个类,实现【Thread.UncaughtExceptionHandler】方法

public class CrashHandler implements Thread.UncaughtExceptionHandler {private static CrashHandler sInstance = new CrashHandler();private Context mContext;private CrashHandler() {}public static CrashHandler getInstance() {return sInstance;}public void init(Context context) {//将当前应用异常处理器改为默认的Thread.setDefaultUncaughtExceptionHandler(this);mContext = context.getApplicationContext();}@Overridepublic void uncaughtException(Thread thread, Throwable ex) {//导入异常信息到SD卡中try {saveExceptionToSDCard(ex);} catch (IOException e) {e.printStackTrace();}ex.printStackTrace();//activity任务栈里,只要还存在activity就会重启,需要将他们都finish掉才真正不会重启,  //有个链接可以看一下   https://www.jianshu.com/p/eb34c5df30e5if(mContext instanceof MyApplication) ((MyApplication)mContext).removeActivityTasks();Process.killProcess(Process.myPid());//直接杀死进程,防止自动重启System.exit(0);}/*** 将异常信息写入SD卡*/private void saveExceptionToSDCard(Throwable e) throws IOException {//如果SD卡不存在或无法使用,则无法将异常信息写入SD卡//得到当前年月日时分秒long current = System.currentTimeMillis();String time = new SimpleDateFormat("yyyy-MM-dd_HH_mm_ss").format(new Date(current));//在定义的Crash文件夹下创建文件File file = new File(FilePathUtil.getFullPath(DManager.ROOT +File.separator+DManager.LOGGER+File.separator+"error") + "crash_" + time + ".txt");try{PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));//写入时间pw.println(time);//写入手机信息dumpPhoneInfo(pw);pw.println();//换行e.printStackTrace(pw);pw.close();//关闭输入流} catch (Exception e1) {Log.e(TAG,"dump crash info failed");}}/*** 获取手机各项信息*/private void dumpPhoneInfo(PrintWriter pw) throws PackageManager.NameNotFoundException {//得到包管理器PackageManager pm = mContext.getPackageManager();//得到包对象PackageInfo pi = pm.getPackageInfo(mContext.getPackageName(),PackageManager.GET_ACTIVITIES);//写入APP版本号pw.print("App Version: ");pw.print(pi.versionName);pw.print("_");pw.println(pi.versionCode);//写入 Android 版本号pw.print("OS Version: ");pw.print(Build.VERSION.RELEASE);pw.print("_");pw.println(Build.VERSION.SDK_INT);//手机制造商pw.print("Vendor: ");pw.println(Build.MANUFACTURER);//手机型号pw.print("Model: ");pw.println(Build.MODEL);//CPU架构pw.print("CPU ABI: ");if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {pw.println(Build.SUPPORTED_ABIS);}else {pw.println(Build.CPU_ABI);}}
}

在这里,我们把异常信息写入到了本地我们指定的文件下面,或者我们也可以将异常信息上传到服务器等方便分析错误异常信息。

在应用程序启动时调用 init 方法,将 CrashHandler 设置为默认的未捕获异常处理器。

当线程中出现未捕获的异常时,uncaughtException 方法会被调用

我们可以在MyApplication类里面调用这个

 CrashHandler.getInstance().init(this);

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com