当前位置: 首页 > news >正文

双云官方网站电子招标投标平台网站建设

双云官方网站,电子招标投标平台网站建设,建设银行官方网首页,合肥网络科技有限公司做网站官网介绍如下#xff1a;Thread.UncaughtExceptionHandler (Java Platform SE 8 ) 用于线程因未捕获异常而突然终止时调用的处理程序接口。当线程由于未捕获异常而即将终止时#xff0c;Java虚拟机将使用thread . getuncaughtexceptionhandler()查询该线程的UncaughtExceptio… 官网介绍如下Thread.UncaughtExceptionHandler (Java Platform SE 8 ) 用于线程因未捕获异常而突然终止时调用的处理程序接口。当线程由于未捕获异常而即将终止时Java虚拟机将使用thread . getuncaughtexceptionhandler()查询该线程的UncaughtExceptionHandler并调用该处理程序的uncaughtException方法将线程和异常作为参数传递。 如果一个线程没有显式设置它的UncaughtExceptionHandler那么它的ThreadGroup对象充当它的UncaughtExceptionHandler。如果ThreadGroup对象对处理异常没有特殊要求它可以将调用转发给默认的未捕获异常处理程序。 基于此点我们可以将其应用为整个app出现异常后没有在此处添加异常处理的时候捕获异常并进行通用处理。 1、首先实现 Thread.UncaughtExceptionHandler 接口并创建一个单例 class CrashHandler : Thread.UncaughtExceptionHandler {companion object {private const val TAG CrashHandler//外部存储目录private val INNER_PATH Environment.getExternalStorageDirectory().path//自定义文件夹private const val SELF_FILE /lichang///文件名称private const val CRASH_FILE crash_error.logSuppressLint(SimpleDateFormat)private val formatter: DateFormat SimpleDateFormat(yyyy-MM-dd HH:mm:ss.SSS)val sInstance by lazy(LazyThreadSafetyMode.SYNCHRONIZED) {CrashHandler()}} ... 2、添加初始化方法 private var infos mutableMapOfString, String()private var mContext: Context? nullprivate var mDefaultHandler: Thread.UncaughtExceptionHandler? null//初始化fun init(context: Context) {this.mContext contextthis.mDefaultHandler Thread.getDefaultUncaughtExceptionHandler()Thread.setDefaultUncaughtExceptionHandler(this)} 3、重写 uncaughtException() 方法 override fun uncaughtException(thread: Thread, throwable: Throwable) {if ((!handleException(throwable)) (this.mDefaultHandler ! null)) {//如果代码中没有处理交给系统处理this.mDefaultHandler!!.uncaughtException(thread, throwable);return;}//延时3秒杀死进程Log.e(TAG, Process will be killed in 2 seconds!);try {Thread.sleep(2000)} catch (e: InterruptedException) {Log.e(TAG, error : , e)}android.os.Process.killProcess(android.os.Process.myPid())exitProcess(1)}/*** 处理异常信息* param throwable* return*/private fun handleException(throwable: Throwable?): Boolean {if (throwable null) {return false}object : Thread() {override fun run() {Looper.prepare()//在此处处理出现异常的情况throwable.printStackTrace()Log.e(TAG, 出现了未捕获异常)Looper.loop()}}.start()this.mContext?.let { collectDeviceInfo(it) }saveCrashInfo2File(throwable)return true}/*** 收集设备信息* param context*/private fun collectDeviceInfo(context: Context) {val packageInfo: PackageInfo?try {packageInfo context.packageManager.getPackageInfo(context.packageName,PackageManager.GET_ACTIVITIES)if (packageInfo ! null) {val versionName if (packageInfo.versionName null) null else packageInfo.versionNameval versionCode packageInfo.versionCode.toString() this.infos[versionName] versionNamethis.infos[versionCode] versionCode}} catch (e: PackageManager.NameNotFoundException) {Log.e(TAG, an error occured when collect package info, e)}//获取Build信息val declaredFields: ArrayField Build::class.java.declaredFieldsval length declaredFields.sizevar i 0while (i length) {val declaredField: Field declaredFields[i]try {declaredField.setAccessible(true)this.infos[declaredField.getName()] declaredField.get(null).toString()} catch (e: Exception) {Log.e(TAG, an error occured when collect crash info, e)}i 1}}/*** 保存crash信息到文件* param throwable* return*/private fun saveCrashInfo2File(throwable: Throwable): String? {var throwable: Throwable? throwableval crashInfos StringBuffer()//添加分隔行crashInfos.append(\r\n)//添加crash时间crashInfos.append(Crash Time)crashInfos.append()crashInfos.append(formatter.format(Date(System.currentTimeMillis())))crashInfos.append(\r\n)val iterator: IteratorMap.EntryString, String infos.entries.iterator()var next: Map.EntryString, String? nullwhile (iterator.hasNext()) {next iterator.next()crashInfos.append(next.key)crashInfos.append()crashInfos.append(next.value)crashInfos.append(\r\n)}val exceptionInfo StringWriter()val printWriter PrintWriter(exceptionInfo)throwable!!.printStackTrace(printWriter)//循环获取throwable的栈信息throwable throwable.causewhile (throwable ! null) {throwable.printStackTrace(printWriter)throwable throwable.cause}printWriter.close()crashInfos.append(exceptionInfo.toString())try {System.currentTimeMillis()if (Environment.getExternalStorageState() Environment.MEDIA_MOUNTED) {val file File($INNER_PATH$SELF_FILE)if (!file.exists()) {file.mkdirs()}val fos FileOutputStream($INNER_PATH$SELF_FILE$CRASH_FILE, true)fos.write(crashInfos.toString().toByteArray())fos.close()}return CRASH_FILE} catch (e: Exception) {Log.e(TAG, an error occured while writing file..., e)}return null} 4、在 BaseApplication 里实现activity 里也行但毕竟 application 生命周期更长可以更好的捕获异常位置。 CrashHandler.sInstance.init(this) 5、验证手动抛出一个error“ throw Exception(error)” logcat 输出内容如下 10:48:38.287 AndroidRuntime D Shutting down VM 10:48:38.293 AndroidRuntime E FATAL EXCEPTION: mainProcess: com.lichang.source, PID: 29787java.lang.RuntimeException: java.lang.reflect.InvocationTargetExceptionat com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:563)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)Caused by: java.lang.reflect.InvocationTargetExceptionat java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:553)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) Caused by: java.lang.Exception: errorat com.lichang.source.MainActivity.onCreate$lambda$0(MainActivity.kt:23)at com.lichang.source.MainActivity.$r8$lambda$1d06GL5SsQcwKha8s7cR5MexWzU(Unknown Source:0)at com.lichang.source.MainActivity$$ExternalSyntheticLambda0.onClick(Unknown Source:0)at android.view.View.performClick(View.java:7448)at android.view.View.performClickInternal(View.java:7421)at android.view.View.access$3700(View.java:838)at android.view.View$PerformClick.run(View.java:28870)at android.os.Handler.handleCallback(Handler.java:938)at android.os.Handler.dispatchMessage(Handler.java:99)at android.os.Looper.loopOnce(Looper.java:201)at android.os.Looper.loop(Looper.java:288)at android.app.ActivityThread.main(ActivityThread.java:7941)at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:553) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)  10:48:38.299 System.err W java.lang.RuntimeException: java.lang.reflect.InvocationTargetException 10:48:38.299 System.err W at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:563) 10:48:38.299 System.err W at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) 10:48:38.300 System.err W Caused by: java.lang.reflect.InvocationTargetException 10:48:38.300 System.err W at java.lang.reflect.Method.invoke(Native Method) 10:48:38.300 System.err W at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:553) 10:48:38.300 System.err W ... 1 more 10:48:38.300 System.err W Caused by: java.lang.Exception: error 10:48:38.301 System.err W at com.lichang.source.MainActivity.onCreate$lambda$0(MainActivity.kt:23) 10:48:38.301 System.err W at com.lichang.source.MainActivity.$r8$lambda$1d06GL5SsQcwKha8s7cR5MexWzU(Unknown Source:0) 10:48:38.301 System.err W at com.lichang.source.MainActivity$$ExternalSyntheticLambda0.onClick(Unknown Source:0) 10:48:38.301 System.err W at android.view.View.performClick(View.java:7448) 10:48:38.302 System.err W at android.view.View.performClickInternal(View.java:7421) 10:48:38.302 System.err W at android.view.View.access$3700(View.java:838) 10:48:38.302 System.err W at android.view.View$PerformClick.run(View.java:28870) 10:48:38.302 System.err W at android.os.Handler.handleCallback(Handler.java:938) 10:48:38.302 System.err W at android.os.Handler.dispatchMessage(Handler.java:99) 10:48:38.303 System.err W at android.os.Looper.loopOnce(Looper.java:201) 10:48:38.303 System.err W at android.os.Looper.loop(Looper.java:288) 10:48:38.303 System.err W at android.app.ActivityThread.main(ActivityThread.java:7941) 10:48:38.303 System.err W ... 3 more 10:48:38.303 CrashHandler E 出现了未捕获异常 10:48:38.472 CrashHandler E Process will be killed in 2 seconds! ---------------------------- PROCESS ENDED (29787) for package com.lichang.source ---------------------------- 10:48:40.473 Process I Sending signal. PID: 29787 SIG: 9记录如下
http://www.hkea.cn/news/14400360/

相关文章:

  • 西安网站开发公司排行榜红古微信网站建设
  • 网站的整体规划怎么写值得玩的网页游戏
  • 如何做网站吸引广告商淘客网站如果做优化
  • 常州微信网站建设方案qq是根据哪款软件开发的
  • 湖南网站开发公司城乡建设招投标网站
  • 网站改版需要注意什么php如何解析wordpress
  • 深圳做网站哪个平台好unas做网站服务器
  • 广州企业网站模板建站中国服装网
  • 美工培训网站WordPress批量扫描
  • 陶瓷网站开发背景绍兴网站建设
  • 9个做简历的网站长治建设网站公司
  • 长沙建站公司招聘邹平网站建设
  • wordpress全站美化福步外贸论坛找客户
  • 定制网站模板wordpress文章页多个产品图
  • 怎样给网站做竞价推广公司如何建设网站
  • 阿里巴巴怎样做网站好的wordpress企业模板
  • 网站不稳定有什么影响腾讯云免费云服务器
  • 湖北正规网站建设检修东莞常平新楼盘
  • 河北新亚建设集团网站江苏嘉力电力建设有限公司网站
  • 网站建设报告内容机械网站建设公司推荐
  • 微信分销网站建设做网站的需求清单
  • 海外网站建站门户网站app
  • 辽宁品牌建设促进会 网站小企业网站价格
  • 陕西省交通建设集团商界分公司网站对外宣传及网站建设文件稿
  • 网站制作公司有哪些移植wordpress数据库
  • 网站建设教程纯正苏州久远网络哪网站建设
  • 外贸建站优化做报名网站
  • 网站设计是什么网站建设战略伙伴
  • 公司网站开发费用放在什么科目如何免费注册网站平台
  • 成都专业网站建设哪家好网站描述怎么写利于seo