一种捕获ANR和Crash相关信息的解决方案

在Android应用开发中,为解决远程设备上的Crash和ANR问题,本文提出了一种解决方案。应用层的Crash捕获能全面收集信息,而ANR捕获则可通过监听'android.intent.action.ANR'广播实现,但存在信息不全和额外权限需求。建议在ROM级别,于AMS中针对自研应用捕获异常信息,记录到文件,并用JobIntentService上传服务器,以自动化处理和分配问题。
摘要由CSDN通过智能技术生成

在应用开发过程中,当手机出货后应用使用过程中出现的一些比较严重的问题(如crash、anr)开发人员无法得知,从而无法进行相关的维护。下面给出一种常用解决方案:

1.应用层crash捕获方案

对于crash异常比较好处理,在java语言中可以通过实现UncaughtExceptionHandler去自定义处理未被应用自身catch的exception,相关代码如下:
@SuppressLint("StaticFieldLeak")
class CrashHandler private constructor() : Thread.UncaughtExceptionHandler {
    private lateinit var context: Context

    private val path: String = Environment.getExternalStorageDirectory().path + "/bugly/log/"

    private val defaultCrashHandler = Thread.getDefaultUncaughtExceptionHandler()

    init {
        Thread.setDefaultUncaughtExceptionHandler(this)
    }

    private fun init(context: Context) {
        this.context = context.applicationContext
    }

    override
    fun uncaughtException(thread: Thread, ex: Throwable) {
        LogUtils.e(TAG, "uncaughtException thread ${thread.id},error ${ex.message}")

        try {
            dumpExceptionToExternalStorage(ex)

            //todo upload exception to server
        } catch (e: IOException) {
            e.printStackTrace()
        }

        ex.printStackTrace()

        defaultCrashHandler.uncaughtException(thread, ex)
    }

    private fun dumpExceptionToExternalStorage(ex: Throwable) {
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值