Rav*_*jan 9 android webview mutable-context-wrapper
问题:我想在Android WebView中预加载网页,并在活动准备好后将其附加到活动.加载网页的触发点是在创建实际的Activity之前.所以我通过以下方式在服务中创建webview对象.
MutableContextWrapper contextWrapper = new MutableContextWrapper(serviceContext.getApplicationContext());
this.webView = new WebView(contextWrapper);
Run Code Online (Sandbox Code Playgroud)
当需要显示此webview的Activity被创建时,我只需创建一个framelayout并添加一个子视图,即此webview并调用setContentView.这样我的webview就会显示预先加载的网页.我也做了以下
contextWrapper.setBaseContext(CurrentActivity.this);
Run Code Online (Sandbox Code Playgroud)
这与上面指定的ContextWrapper对象相同.即使在此之后,webview也不会绘制能够在正常用例中绘制的Javascript警报.
即使我这样做
ContextWrapper contextWrapper = new ContextWrapper(CurrentActivity.this);
this.webView = new WebView(contextWrapper);
this.webView.loadUrl(someUrl);
Run Code Online (Sandbox Code Playgroud)
WebView无法弹出JS警报.我甚至没有在日志中看到任何异常或致命标签.WebView无法在其上绘制任何窗口.
这在正常方式下工作正常,这意味着直接使用当前活动的上下文创建webView.
this.webView = new WebView(CurrentActivity.this);
this.webView.loadUrl(someUrl);
Run Code Online (Sandbox Code Playgroud)
据我所知,http://developer.android.com/reference/android/content/ContextWrapper.html只对它在构造函数中传递给它的基本上下文执行相同的操作.
我的用例是这样的.我创建了一个webView对象,其中传递了http://developer.android.com/reference/android/content/MutableContextWrapper.html.MutableContextWrapper保存某些活动的上下文,或者它可以保存或应用程序上下文.当需要显示webview的实际活动开始时,我在MutableContextWrapper中切换上下文并通过将其放在框架布局和setContentView中来显示webview.基本上,开始加载页面的触发器是在创建Activity之前,因此我想在webview中预加载页面,并在创建活动时将其附加到活动.
看起来您正在脱离主 UI 线程创建 Web 视图(基于 的使用serviceContext)
这通常不是一个好主意,因为 Web 视图期望其内部 Handler 绑定到主 UI 线程。
还有与此相关的其他线程:
最好在加载 Activity 后加载 Web 视图(即在方法中onCreate)并简单地向用户显示“正在加载”指示器。您可以隐藏 webview(使用setVisibility)直到它加载页面,并使用WebViewClient监听加载事件。
页面加载后,将 Web 视图上的可见性设置为VISIBLE
| 归档时间: |
|
| 查看次数: |
1614 次 |
| 最近记录: |