gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:43:48 50 4
gpt4 key购买 nike

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

MutableContextWrapper contextWrapper = new MutableContextWrapper(serviceContext.getApplicationContext());
this.webView = new WebView(contextWrapper);

当创建需要显示此 webview 的 Activity 时,我只需创建一个 framelayout 并添加一个 subview ,即此 webview 并调用 setContentView。这样我的 webview 就会显示预加载的网页。我还做了以下事情

contextWrapper.setBaseContext(CurrentActivity.this);

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

即使我这样做了

ContextWrapper contextWrapper = new ContextWrapper(CurrentActivity.this);
this.webView = new WebView(contextWrapper);
this.webView.loadUrl(someUrl);

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

这在正常方式下工作正常,意味着直接使用当前 Activity 的上下文创建 webView。

this.webView = new WebView(CurrentActivity.this);
this.webView.loadUrl(someUrl);

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

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

最佳答案

看起来您是在主 UI 线程之外创建 Web View (基于 serviceContext 的使用)

这通常不是一个好主意,因为 Web View 希望其内部处理程序绑定(bind)到主 UI 线程。

还有其他与此相关的话题:

A WebView in a thread can't be created

最好在 Activity 加载后加载 webview(即在 onCreate 方法中)并简单地向用户显示“正在加载”指示器。您可以隐藏 webview(使用 setVisibility)直到它加载页面,并使用 WebViewClient监听加载事件。

页面加载后,将您的 webview 的可见性设置为 VISIBLE

关于android - 使用 ContextWrapper 和 Context 创建 Android WebView 对象时有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15293724/

50 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com