奇怪的android webview内存泄漏

时间:2018-01-19 13:04:36

标签: android webview memory-leaks kotlin

我已经花了两天时间试图找出问题所在。发生的事情是我简单地扩展由WebView内部约束布局组成的布局。然后我有这个代码基本上加载一个页面并清除onDestroy()中的WebView。

class MainActivity: AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.main)
        find<Webn>(R.id.webview).loadUrl("url")
//        watch(this)
    }

    override fun onDestroy() {
        super.onDestroy()
        find<Webn>(R.id.webview).reset()
    }
}

不知何故,这会导致内存泄漏!怎么样???这很简单。我安装了泄漏金丝雀并尝试对此进行分析,并且跟踪导致我进入内部的android类,其中包含对该活动的引用。我试图通过反射将它们全部设置为null但是一旦我释放一个引用,另一个弹出。发生了什么,我该如何解决?

这是LeakCanary的最新踪迹。对MainActivity的引用位于mBase字段中,但一直导航到此类并尝试设置此字段会产生NoSuchFieldException。这意味着即使通过反思我也无法访问它。

enter image description here

1 个答案:

答案 0 :(得分:0)

首先,我无法在reset()上找到Webview方法,而在reset()上您不需要Webview onDestroy() }

相反,您应该在onPause()onResume()上执行此操作:

 @Override
    protected void onPause() {
        super.onPause();
        mWebView.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mWebView.onResume();
    }