首页 > 代码库 > [Android]WebView method must on same thread
[Android]WebView method must on same thread
问题描述
最近代码里使用了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线程中去执行。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。