2013-03-08 38 views
9

问题:我想在Android WebView内部预先加载一个网页,并在活动准备就绪后将它附加到一个Activity中。加载网页的触发点在创建实际活动之前。所以我用下面的方法在服务中创建一个webview对象。当我使用ContextWrapper和Context创建Android WebView对象时,有什么区别?

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

当需要显示此webview的Activity已创建时,我只需创建一个framelayout并添加一个子视图,即此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中的上下文,并将其放入框架布局和setContentView中以显示webview。基本上,启动加载页面的触发器是在创建Activity之前进行的,因此我想在webview中预加载页面,并在创建它时将其附加到活动中。

+0

我不是很明白的问题。只要有这么多的投票,有人可以试图使其更清楚? – 2013-03-08 15:14:10

+0

嗨鲍里斯,我已经更新了问题的详细信息 – 2013-03-08 15:48:18

回答

1

它看起来像你创建关闭主UI线程Web视图(基于使用的serviceContext

这通常不是一个好主意,因为Web视图会想到它的内部处理程序是绑定到主UI线程。

有关于这个其他线程:

A WebView in a thread can't be created

你好得多活动加载后加载的网页流量(即在onCreate方法),只是显示“加载”指示器给用户。您可以隐藏web浏览器(使用setVisibility),直到它已加载页面,并使用WebViewClient来侦听加载事件。

一旦页面加载设置您的WebView能见度VISIBLE

相关问题