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

php网站开发所需要的软件软文营销的三个层面

php网站开发所需要的软件,软文营销的三个层面,wordpress 网站同步,做网站有哪些需求官网介绍如下:Thread.UncaughtExceptionHandler (Java Platform SE 8 ) 用于线程因未捕获异常而突然终止时调用的处理程序接口。当线程由于未捕获异常而即将终止时,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.log"@SuppressLint("SimpleDateFormat")private val formatter: DateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")val sInstance by lazy(LazyThreadSafetyMode.SYNCHRONIZED) {CrashHandler()}}
...
2、添加初始化方法
    private var infos = mutableMapOf<String, 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: Array<Field> = 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: Iterator<Map.Entry<String, String>> = infos.entries.iterator()var next: Map.Entry<String, 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.hengruixuexiao.com/news/20186.html

相关文章:

  • 滁州项目建设公示在哪个网站网站域名解析ip查询
  • ps网站背景图片怎么做seo是什么岗位的缩写
  • 深圳专业企业网站建设网络推广一般都干啥
  • 自助开通网站潍坊今日头条新闻最新
  • 网赌网站怎么做怎么做电商创业
  • 网站开发工资网站建设流程图
  • 公司网站费怎么做分录哪里有学市场营销培训班
  • 怎么用ftp上传网站甘肃seo网站
  • 百度云 做视频网站软文街官网
  • 广东东莞最近出什么事了怎么关键词优化网站
  • 伊春住房和城乡建设局网站seo排名啥意思
  • 网站建设 外文文献怎么推广自己的微信
  • 微信小程序 创建网站长沙网红打卡景点排行榜
  • 手机app快速开发平台网站seo推广员招聘
  • 定制网站建设设计公司免费学生网页制作成品
  • wordpress图标不显示了江西网络推广seo
  • 合肥做网站推广的公司百度地图疫情实时动态
  • 外贸网站建设公司服务百度推广开户费用多少
  • 做直播券的网站有多少上海排名seo公司
  • 湘潭县委网站快速开发平台
  • 深圳做网站哪个公司好windows优化大师收费
  • 宁波大型网站推广服务天津seo管理平台
  • 软件项目管理pdf广告网站建设网站排名优化
  • 有哪些关于校园内网站建设的法律优秀企业网站模板
  • 惠州网络推广公司班级优化大师手机版下载(免费)
  • 做自己的网站不是免费的个人做seo怎么赚钱
  • 佛山营销型网站建设新乡seo外包
  • 武汉做网站优化公司如何让产品吸引顾客
  • 长沙学网页设计的学校有哪些seo关键词推广公司
  • 上海 有哪些做网站的公司襄阳网站seo