美文网首页
Android AssetManager.finalize()

Android AssetManager.finalize()

作者: 周_0717 | 来源:发表于2020-02-18 20:45 被阅读0次

  这类错误是由于回收对象时间过长,由FinalizerWatchdogDaemon负责计时,超时后抛出异常关闭VM的。使用关闭计时器的方式避免崩溃发生

    private fun fixAssetManager() {
        val device = Build.BRAND + " " + Build.MODEL
        if (!TextUtils.isEmpty(device)) {
            if (device.contains("OPPO R9") || device.contains("OPPO A5") || device.contains("OPPO A3")
                    || device.contains("OPPO R7") || device.contains("360 180") || device.contains("LE X8")) {
                try {
                    // 关闭掉FinalizerWatchdogDaemon
                    val clazz = Class.forName("java.lang.Daemons\$FinalizerWatchdogDaemon")
                    val method = clazz.superclass!!.getDeclaredMethod("stop")
                    method.isAccessible = true
                    val field = clazz.getDeclaredField("INSTANCE")
                    field.isAccessible = true
                    method.invoke(field.get(null))
                } catch (e: Throwable) {
                    e.printStackTrace()
                }

            }
        }
    }

相关文章

网友评论

      本文标题:Android AssetManager.finalize()

      本文链接:https://www.haomeiwen.com/subject/vxunfhtx.html