我已经花了两天时间试图找出问题所在。发生的事情是我简单地扩展由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。这意味着即使通过反思我也无法访问它。
答案 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();
}