我正在播放一个视频WebView
。
如果要避免内存泄漏,则ApplicationContext
(相对于Activity
上下文)必须用于实例化WebView
(请参阅this)
如果我传入ApplicationContext
和VideoView
里面WebView
需要创建一个对话框(通常是“无法播放此视频”),我会得到一个BadTokenException
(参考这个)
我们是否应该在内存泄漏或潜在的 ANR 之间做出决定?
我从上面的评论和进一步的测试中得出结论,问题是 SDK 中的一个错误:通过 XML 布局创建 WebView 时,活动作为 WebView 的上下文传递,而不是应用程序上下文。完成活动后,WebView 仍然保留对活动的引用,因此活动不会从内存中删除。我为此提交了一个错误报告,请参阅上面评论中的链接。
webView = new WebView(getApplicationContext());
这绝对是一个bug,或者api设计真的很糟糕,它没有给出任何错误提示。相信很多开发者都遇到过这个问题。