频道栏目
IT货架 > > 正文
[Android]WebView method must on same thread
网友分享于:Jan 1, 1970 8:00:00 AM    来源: IT货架   

标签:android   java   使用   os   io   问题   cti   div   

问题描述

最近代码里使用了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.java
public 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

[Android]WebView method must on same thread

标签:android   java   使用   os   io   问题   cti   div   

广告服务联系QQ:1134687142 | 网站地图

版权所有: IT货架- 内容来自互联网,仅供用于技术学习,请遵循相关法律法规. 京ICP备11030978号-1