美文网首页
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