【问题标题】:How safe is MutableContextWrapperMutableContextWrapper 有多安全
【发布时间】:2016-03-26 15:21:48
【问题描述】:

Android 的MutableContextWrapper 在内存泄漏等方面的使用安全性如何?我正在用Activity 的上下文实例化WebView,然后想将其上下文更改为另一个Activity

Here 是一个警告使用MutableContextWrapper 代替WebView 的答案,因为它可能导致混合上下文的泄漏。但是我没有看到任何原因,当我们改变它的上下文时它怎么会导致泄漏? 为什么我们不应该在视图初始化后改变它的上下文?

有没有人用过并遇到过任何问题(特别是WebView)?使用时有什么预防措施吗?有什么数据可以分享吗?

【问题讨论】:

    标签: android webview memory-leaks mutable-context-wrapper


    【解决方案1】:

    绝对不安全。 Context 上的某些操作需要反操作以释放资源,例如Context.registerComponentCallabacksContext.registerReceiver,如果同时更改上下文,这意味着将不会为初始上下文调用反操作,从而导致资源泄漏。 WebView 使用这些操作,这是肯定的。

    请注意,WebView 是一个比常规 View 复杂得多的组件,因为它包含网络堆栈、渲染引擎等。

    【讨论】:

    • 但 AdMob 也在使用 MutableContextWrapper。我在扩展 WebView 的类中反编译了 Google Play 服务代码后检查了它。我可以看到他们正在使用 MutableContextWrapper 实例化该 webview。
    • 据我了解,他们有时需要使用 Application 上下文而不是 Activity 上下文,这就是他们使用 MutableContextWrapper 的原因。它不适用于在活动之间传递 WebView。
    • 如果他们只是需要使用AppContext,他们可以将它保存在另一个变量中,并在需要时使用它。但他们实际上是在改变 WebView 的上下文(但在这两种情况下他们都在使用 AppContext)
    • 抱歉不清楚,“他们需要使用”实际上是指他们需要在某些情况下将不同的上下文传递给 WebView。但这似乎只是为了解决一些错误。
    猜你喜欢
    • 2016-09-16
    • 2015-11-20
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 2017-09-12
    • 2019-05-23
    相关资源
    最近更新 更多