码迷,mamicode.com
首页 > 移动开发 > 详细

[Android]WebView method must on same thread

时间:2014-08-11 21:26:12      阅读:281      评论:0      收藏:0      [点我收藏+]

标签: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   

原文地址:http://blog.csdn.net/wzy_1988/article/details/38497585

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!