【问题标题】:What is the difference when I create an Android WebView object with a ContextWrapper and a Context?当我使用 ContextWrapper 和 Context 创建 Android WebView 对象时有什么区别?
【发布时间】:2018-04-20 03:20:37
【问题描述】:

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

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

创建需要显示此 webview 的 Activity 时,我只需创建一个框架布局并添加一个子视图,即此 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 无法在其上绘制任何窗口。

这可以正常工作,这意味着直接使用当前活动的上下文创建 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 保存一些活动的上下文,或者它可以保存或应用程序上下文。当需要显示 webview 的实际活动开始时,我在 MutableContextWrapper 中切换上下文并通过将 webview 放入框架布局和 setContentView 来显示 webview。基本上,开始加载页面的触发器是在创建 Activity 之前,因此我想在 webview 中预加载页面,并在创建时将其附加到 Activity。

【问题讨论】:

  • 我不太明白这个问题。只要它受到如此多的支持,有人可以尝试让它更清楚吗?
  • 嗨,鲍里斯,我已经更新了问题详情

标签: android webview mutable-context-wrapper


【解决方案1】:

看起来您正在从主 UI 线程创建 Web 视图(基于 serviceContext 的使用)

这通常不是一个好主意,因为 Web 视图会期望其内部 Handler 绑定到主 UI 线程。

还有其他与此相关的线程:

A WebView in a thread can't be created

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

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

【讨论】:

    猜你喜欢
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 2012-09-07
    • 2021-10-25
    相关资源
    最近更新 更多