[Android]WebView method must on same thread
时间:2014-08-11 21:26:12
收藏:0
阅读:446
问题描述
最近代码里使用了webview,主要是使用webview load了远程的url。但是我从实现了javascript接口,调用javascript中方法刷新url时,发现刷新代码没有实际效果。示例代码如下:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
final WebView webView = (WebView)findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebChromeClient(new WebChromeClient());
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
javascr = new AndroidJavascript(this, webView);
webView.addJavascriptInterface(javascr, "AndroidFunction");
webView.loadUrl("file:///android_asset/www/index.html");
}AndroidJavascript.javapublic class AndroidJavascript {
Context cont;
WebView webView;
AndroidJavascript(Context c, WebView w) {
cont = c;
webView = w;
}
// function called in the javascript by AndroidFunction.test();
public void test() {
webView.loadUrl("javascript:helloBack()");
}
}问题解决
JavaScript接口中方法是在后台线程中执行,并不是在主线程中执行。但是,所有跟Android UI相关的方法都需要在主UI线程中进行调用。因此,这里需要使用post方法,将load url操作转移到主线程中,示例代码如下:
public void test() {
webView.post(new Runnable() {
public void run() {
webView.loadUrl("javascript:helloBack()");
}
});
}这可以将任务放到主UI线程中去执行。[Android]WebView method must on same thread,布布扣,bubuko.com
原文:http://blog.csdn.net/wzy_1988/article/details/38497585
评论(0)