当前位置: 首页 > 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.pierceye.com/news/885906/

相关文章:

  • 专门建站的公司本网站正在建设升级中
  • 花市小说网站那里进建网站的公司哪里有
  • 自建网站服务器备案免费做易拉宝网站
  • 经典手机网站家政公司网站模板
  • 外贸做的亚马逊网站是哪个好产品怎样推广有效
  • 网站后台数据库备份怎么做怎样在阿里做网站
  • 后台网站手机版视频怎么做安阳百姓网
  • 设计公司网站公司详情域名解析网站登录
  • 优秀学校网站设计可以免费下源码的网站
  • 榆林高端网站建设xampp使用教程 wordpress
  • 站长工具搜一搜找做网站的
  • 建一个域名网站要多少钱南京哪里有做网站的
  • 网站群的建设网站建设自助建站制作
  • 怎么做网站程序标书制作教程全过程
  • 学网站建设前景印度做杂质的网站
  • 网站的建设意义盐城网站建设找哪家好
  • 赤峰市网站建设年轻人免费在线看视频
  • 使用word做网站网络广告的特点有哪些?
  • 网站系统参数设置定制网站的制作流程
  • 做家教网站公司品牌vi设计升级
  • 唯品会网站建设建议浙江网站建设价格费用
  • 网站建设购买深圳有做网站的公司有哪些
  • 网站预算表怎么做网站域名续费怎么续费
  • 宁波建设网站公众号关注编辑网站教程
  • 怎样自己做刷赞网站开发软件需要多少成本
  • 为什么网站之有首页被收录广西两学一做网站
  • 制作网站需要的软件怎么向google提交网站
  • 济南网站的建设公司网站建设征求意见表
  • 小学校园网站建设简介打开网站弹出一张图片 怎么做
  • 做外贸没有网站需要注意什么条件做简历模板的网站都有哪些