问题标签 [mutable-context-wrapper]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1807 浏览

android - 当我使用 ContextWrapper 和 Context 创建 Android WebView 对象时有什么区别?

问题:我想在 Android WebView 中预加载一个网页,并在 Activity 准备好时将其附加到 Activity。加载网页的触发点是在实际 Activity 被创建之前。所以我通过以下方式在服务中创建了一个 webview 对象。

当创建需要显示此 webview 的 Activity 时,我只需创建一个框架布局并添加一个子视图,即此 webview 并调用 setContentView。这样,我的 webview 就会显示预加载的网页。我也做以下

这与上面指定的 ContextWrapper 对象相同。即使在此之后,webview 也不会绘制它能够在正常用例中绘制的 Javascript 警报。

即使当我这样做

WebView 无法弹出 JS 警报。我什至没有在日志中看到任何异常或致命标签。WebView 无法在其上绘制任何窗口。

这可以正常工作,这意味着直接使用当前活动的上下文创建 webView。

据我所知, http: //developer.android.com/reference/android/content/ContextWrapper.html只是在它持有的基本上下文上执行与在构造函数中传递给它的操作相同的操作。

我的用例是这样的。我创建了一个带有http://developer.android.com/reference/android/content/MutableContextWrapper.html传递给它的 webView 对象。MutableContextWrapper 保存一些活动的上下文,或者它可以保存或应用程序上下文。当需要显示 webview 的实际活动开始时,我在 MutableContextWrapper 中切换上下文并通过将 webview 放入框架布局和 setContentView 来显示 webview。基本上,开始加载页面的触发器是在创建 Activity 之前,因此我想在 webview 中预加载页面,并在创建时将其附加到 Activity。

0 投票
1 回答
2023 浏览

android - Android - 如何在使用应用程序上下文创建 WebView 后将其附加到 Activity

我正在使用应用程序上下文在后台创建一个 Android WebView,以便在我需要显示它时加载并准备好它。我在需要时使用 addView 将它附加到我的 Activity 中。这通常效果很好,但是当我尝试打开 HTML 选择下拉列表时,我遇到了崩溃:

我假设这是因为我使用 ApplicationContext 创建了 WebView。我的问题是:有没有办法解决这个问题?有没有办法将现有的 WebView “附加”到不同的 Activity 或 Window 以便可以创建 Dialog?有没有办法通过在运行时更改上下文来使用反射来“破解”这个?

编辑:如下所示,我使用MutableContextWrapper进行了测试,它似乎很好地解决了这个问题!

0 投票
0 回答
487 浏览

android - WebView 从一个 Activity 传递到另一个时没有正确刷新

我需要将一个 WebView 传递给另一个 Activity,并且我无法在新的 Activity 中创建新的 WebView,因为无法加载两次 html 内容。所以我设法使用静态黑板和MutableContextWrapper解决了这个问题。

方法是:(i) 原始 Activity 使用MutableContextWrapper实例化 WebView ,在启动第二个 Activity 之前,(ii) 我将 WebView 从原始 Activity 中分离出来,(iii) 将其存储在静态黑板上,当第二个 Activity 启动,(iv) 它获取黑板上的 WebView 实例,(v) 使用MutableContextWrapper更新其 Context ,(vi) 并将其附加到新 Activity。当第二个Activity关闭时,按照相反的方式将WebView放回原来的Activity中。

这种方法在大多数 Android 版本中效果很好,但是自从 Lollipop 版本以来,WebView 在附加到第二个 Activity 时不会刷新其内容。但是,当第二个 Activity 关闭并且 WebView 恢复到原始 Activity 时,它可以正常工作。

在我的研究中,我发现了来自 Android L 的 WebViews 的新行为,它通过智能地选择需要绘制的 HTML 文档部分来减少内存占用并提高性能。

所以我怀疑这个功能可能会干扰WebView的刷新,但是即使调用enableSlowWholeDocumentDraw()方法,WebView仍然无法正常工作。

有人会知道解释这种行为的原因吗?

0 投票
1 回答
682 浏览

android - MutableContextWrapper 有多安全

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

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

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

0 投票
1 回答
432 浏览

java - 如何使用 LayoutInflater 来膨胀布局,其中包含指向 MutableContextWrapper 的视图?

我有一个复杂的“浮动视图”层次结构,我在不同的活动之间移动。由于这些视图是跨活动共享的,它们都应该有一个MutableContextWrapper允许它们更改基本上下文的视图。理论上我可以同时拥有多个浮动视图。

以下是浮动视图的示例 XML:

我正在使用 a 对这个 XML 进行膨胀MutableContextWrapper并将其添加到将容纳它的 FrameLayout 中(这样我就可以将它拖过屏幕),但我没有得到我需要的结果:

问题在于,虽然FrameLayout具有MutableContextWrapper膨胀对象的上下文是创建视图的 Activity。这意味着上面的代码因为SampleFloatingView没有MutableContextWrapper. 如果我删除此代码,一旦我将视图与原始活动断开连接并将其移动到下一个活动,稍后就会发生内存泄漏。

这个问题的一个明显解决方案是手动创建整个层次结构并MutableContextWrapper在构造函数中传递 (就像我为 做的那样FrameLayout),但出于明显的原因我宁愿避免它。

我的问题是是否有更好的方法可以让我从 XML 扩展视图并强制它们的上下文指向MutableContextWrapper?

0 投票
0 回答
55 浏览

android - 带有 MutableContextWrapper VS 片段的自定义视图

我想在多个activities. (请忽略原因)我很好奇以下选择的优缺点

  • MutableContextWrapper用于自定义视图(例如RelativeLayout:)并在显示时切换context到另一个activity。因此,将视图从 移动activityactivity
  • 使用fragments.