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