问题:我想在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中预加载页面,并在创建它时将其附加到活动中。
我不是很明白的问题。只要有这么多的投票,有人可以试图使其更清楚? – 2013-03-08 15:14:10
嗨鲍里斯,我已经更新了问题的详细信息 – 2013-03-08 15:48:18