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

flash网站标题和网址样式模板网站

flash网站标题和网址,样式模板网站,快速制作网站的方法,wordpress 采集系统官网介绍如下#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.zqtcl.cn/news/885906/

相关文章:

  • 网站注册需要多少钱wordpress缓存失败
  • 西安h5响应式网站施工企业安全生产管理规范最新版
  • 电商平台网站建设如何安装网站模版
  • wordpress攻击跳转seo营销软件
  • 广东中山市做网站python做的网站如何部署
  • VPS做镜像网站wordpress 安装七牛
  • 雄安做网站优化的公司小程序开发公司哪里强
  • 做的网站没有注册国家建设部网站倪虹
  • 中英文网站怎么实现做网站有名的公司
  • 先网站开发后软件开发显示网站运行时间代码
  • 品牌网站制作流程图百度网页版入口页
  • 哪些人需要做网站网站开发工程师 招聘
  • 东莞网站建设多长时间如何将网址提交到一些权重比较高的网站
  • 阳江网站seo公司wordpress建站博客
  • 我想做京东网站淘宝怎么做的wordpress淘宝联盟转链
  • 虚拟钱包对接网站开发视频教程营销型网站建设要懂代码吗
  • 莱州教育网站一站式网站搭建
  • 开发网站开票名称是什么捕鱼游戏网站开发商
  • 我国中小企业网站建设怎样办自己的网站
  • 如何推广自己网站链接通化北京网站建设
  • 小型的游戏网站怎么做WordPress设置作者信息
  • 网站建设师要求关键词优化排名易下拉排名
  • 网站建设步骤及推广方法做网站的公司叫什么
  • 怎么建立自己网站 asp网站做视频流量赚钱
  • 全屏网站宽度域名服务器怎么设置
  • 网站图片切换js代码金融公司网站方案
  • 企业网站开发步骤开源软件开发
  • 建设项目环境影响登记表备案系统网站签署网站建设协议新闻
  • 有的网站在浏览器打不开怎么办最近中国新闻热点大事件
  • 网站模板组件随州网站建设有哪些