广告
返回顶部
首页 > 资讯 > 移动开发 >Android 记录未捕获异常
  • 800
分享到

Android 记录未捕获异常

异常捕获Android 2022-06-06 13:06:35 800人浏览 泡泡鱼
摘要

文章目录一、CrashHandler二、初始化三、测试四、打印 stackTrace 一、CrashHandler 自定义 Crash 处理器:

文章目录一、CrashHandler二、初始化三、测试四、打印 stackTrace 一、CrashHandler

自定义 Crash 处理器:

object CrashHandler : Thread.UncaughtExceptionHandler {
    private val defaultHandler = Thread.getDefaultUncaughtExceptionHandler()
    fun init() {
        Thread.setDefaultUncaughtExceptionHandler(this)
    }
    override fun uncaughtException(thread: Thread, throwable: Throwable) {
        Log.d("~~~", "$thread, $throwable")
        defaultHandler?.uncaughtException(thread, throwable)
    }
}
二、初始化

Application 中初始化此 CrashHandler:

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        CrashHandler.init()
    }
}

我们在 CrashManager 中调用

Thread.setDefaultUncaughtExceptionHandler
函数将默认的未捕获异常处理器设置为 CrashHandler 类,当存在未捕获异常时,系统会回调
uncaughtException
方法,我们可以在此方法中将崩溃信息打印出来,或保存到 sd 卡中。

为了不影响系统原有的处理未捕获异常的逻辑,我们在

init
方法中先将默认的崩溃处理器保存下来,存储在 defaultHandler 中,在
uncaughtException
方法中让默认的 handler 也处理此异常。

三、测试

在 MainActivity 中测试一下,本例中布局文件只有一个 id 为 btn 的按钮,故不再给出布局文件:

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        btn.setOnClickListener {
            throw NullPointerException("test")
        }
    }
}

点击按钮,LoGCat 会打印出以下日志

~~~: Thread[main,5,main], java.lang.NullPointerException: test
四、打印 stackTrace

修改 CrashHandler,将崩溃的 stackTrace 打印出来:

object CrashHandler : Thread.UncaughtExceptionHandler {
    private val defaultHandler = Thread.getDefaultUncaughtExceptionHandler()
    fun init() {
        Thread.setDefaultUncaughtExceptionHandler(this)
    }
    override fun uncaughtException(thread: Thread, throwable: Throwable) {
        Log.d("~~~", StringBuilder("$thread, $throwable, stackTrace: ").apply {
            throwable.stackTrace.forEach {
                appendln(it.toString())
            }
        }.toString())
        defaultHandler?.uncaughtException(thread, throwable)
    }
}

修改后,再运行上述测试,Logcat 输出:

~~~: Thread[main,5,main], java.lang.NullPointerException: test, stackTrace: com.example.crashmanager.MainActivity$onCreate$1.onClick(MainActivity.kt:14)
    Android.view.View.perfORMClick(View.java:7251)
    android.view.View.performClickInternal(View.java:7228)
    android.view.View.access$3500(View.java:802)
    android.view.View$PerformClick.run(View.java:27843)
    android.os.Handler.handleCallback(Handler.java:883)
    android.os.Handler.dispatchMessage(Handler.java:100)
    android.os.Looper.loop(Looper.java:214)
    android.app.ActivityThread.main(ActivityThread.java:7116)
    java.lang.reflect.Method.invoke(Native Method)
    com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
    com.android.internal.os.ZyGoteInit.main(ZygoteInit.java:925)

作者:AlpinistWang


--结束END--

本文标题: Android 记录未捕获异常

本文链接: https://www.lsjlt.com/news/28895.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android 记录未捕获异常
    文章目录一、CrashHandler二、初始化三、测试四、打印 stackTrace 一、CrashHandler 自定义 Crash 处理器:...
    99+
    2022-06-06
    异常 捕获 Android
  • 2011-11-21 未捕获异常
    http://www.itpub.net/thread-1499223-17-1.html 167楼 下列哪些选项在执行之后会导致未捕获的异常: ORA-06502: PL/SQL:&nb...
    99+
    2022-10-18
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩...
    99+
    2022-06-06
    异常 方法 捕获 Android
  • Android 捕获运行时异常详解
    Android 捕获运行时异常详解Android 异常分为两类:CheckedException 和 UnCheckedExceptionCheckException:在编译代码时就需要进行try()catch捕获的。UnCheckExce...
    99+
    2023-05-31
    android 捕获 异常
  • Android实现捕获未知异常并提交给服务器的方法
    本文实例讲述了Android实现捕获未知异常并提交给服务器的方法。分享给大家供大家参考,具体如下: 在Android应用中,即便应用已经投放市场,但有时也会遇到一些未知的异常,...
    99+
    2022-06-06
    异常 服务器 方法 捕获 Android
  • Android 全局异常捕获实例详解
    Android 全局异常捕获今天就来说说作为程序猿的我们每天都会遇到的东西bug,出bug不可怕可怕的是没有出bug时的堆栈信息,那么对于bug的信息收集就显得尤为重要了,一般用第三方bugly或者友盟等等都能轻易收集,但是由于公司不让使用...
    99+
    2023-05-31
    android 全局 异常捕获
  • android教程之hockeyapp捕获异常示例
    代码如下:package com.example.testhockeyapp;import net.hockeyapp.android.CrashManager;import...
    99+
    2022-06-06
    异常 示例 Android
  • Android中捕获全局异常实现代码
    1、实现UncaughtExceptionHandler,在方法uncaughtException中处理没有捕获的异常。 public class GlobalExcepti...
    99+
    2022-06-06
    异常 捕获 Android
  • Android开发使用UncaughtExceptionHandler捕获全局异常
    在集成了统计SDK(友盟统计,百度统计等)之后,有一个非常有利于测试的功能:错误分析!此功能能够将程序在运行中碰到的崩溃(runtimeException)问题反馈到服务器,帮...
    99+
    2022-06-06
    异常 android开发 Android
  • java怎么捕获异常
    在Java中,凡是可能抛出异常的语句,都可以用try ... catch捕获。把可能发生异常的语句放在try { ... }中,然后使用catch捕获对应的Exception及其子类。多catch语句可以使用多个catch语句,每个catc...
    99+
    2018-06-21
    java教程 java
  • 详解pythonThreadPoolExecutor异常捕获
    目录解决方法1:解决方法2:python ThreadPoolExecutor线程池的工作线程中出现异常时,主线程不会捕获异常。 解决方法1: 直接在需要执行的任务方法中添加try:...
    99+
    2023-01-29
    python ThreadPoolExecutor异常捕获 python ThreadPoolExecutor
  • python3-抛出、捕获异常
    ''' 异常:错误发生的信号,程序随之终止 三个部分: 1.traceback 异常的追踪信息(链接) 2.异常的类型 3.异常信息 错误两大类: 1.语法错误(运行前进行判定和修正) 2.逻...
    99+
    2023-01-31
    抛出 异常
  • 详解python的异常捕获
    目录①捕捉一个异常②捕捉多个异常③Exception捕捉所有异常④raise主动触发异常⑤try…except…else…finally逻辑...
    99+
    2022-11-13
  • Python多层异常的捕获
    参考: 1、https://mozillazg.github.io/2016/08/python-the-right-way-to-catch-exception-then-reraise-another-exception.h...
    99+
    2023-01-31
    多层 异常 Python
  • qt程序异常结束怎么捕获异常
    在Qt程序中捕获异常可以使用try-catch块来实现。例如:```cpptry {// 可能会抛出异常的代码} catch (co...
    99+
    2023-09-16
    qt
  • python异常捕获详解流程
    1 捕捉一个异常 捕捉一个异常 以用0作为除数会得到ZeroDivisionError异常为例, print(1/0) 为例程序的持续执行,不因该异常而中止, 遂对该异常进...
    99+
    2022-11-13
  • 如何动态捕获Python异常
    如何动态捕获Python异常,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在讨论动态捕获异常时让我大吃一惊的是,可以让我找到隐藏的Bug和乐趣。有问题的代码下面...
    99+
    2023-06-17
  • 如何在Java中捕获异常
    今天就跟大家聊聊有关如何在Java中捕获异常,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2....
    99+
    2023-06-14
  • Python3的异常捕获和处理
    1.try 和 except 这是异常语句。使用了这个可以对报错的代码,也会继续 执行下去而不会报错,不执行后面的代码。try是捕获异常,在try里的代码执行如果出错后,就会执行在execpt里的代码。try: print(2/0)...
    99+
    2023-01-31
    异常
  • python try-except怎么捕获异常
    这篇文章主要介绍“python try-except怎么捕获异常”,在日常操作中,相信很多人在python try-except怎么捕获异常问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python try-...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作