[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线程中去执行。

[Android]WebView method must on same thread,布布扣,bubuko.com

时间: 2024-12-19 12:45:58

[Android]WebView method must on same thread的相关文章

【Android】java.lang.RuntimeException: java.lang.Throwable: A WebView method was called on thread 'JavaBridge'.

一.问题 Java调用JS事件出现 java.lang.RuntimeException: java.lang.Throwable: A WebView method was called on thread 'JavaBridge'. All WebView methods must be called on the same thread. (Expected Looper Looper (main, tid 1) {3474c308} called on Looper (JavaBridg

Android - A WebView method was called on thread 'JavaBridge

源码: webView.evaluateJavascript("javascript:"+callBack + "(" + request + ")", new ValueCallback<String>() { @Override public void onReceiveValue(String value) { Log.d(TAG, "onReceiveValue: "+value+ pin); // Sof

webView.loadUrl 错误:A WebView method was called on thread &#39;JavaBridge&#39;.

String voicePath="file://"+MVOICEPATH; webView.loadUrl("javascript:voiceStopCallback('"+voicePath+"')"); 日志错误提示: A WebView method was called on thread 'JavaBridge'. All WebView methods must be called on the same thread 解决办法 w

android webView 图片加载不出来 后台报错Uncaught TypeError: Cannot call method &#39;getElementsByTagName&#39; of null

在之前,webView加载图片完全没有问题.直到前端H5开发换新的加载图片的方式,导致图片忽然加载不出来了. 从后台日志看到了webview 打印了报错信息 Cannot call method 'getElementsByTagName' of null 我怀疑是不是由于此处报错终止了图片加载的进程. 分析此处错误出现的原因: 由于调用的H5界面的js其中的写法不规范,webView在加载的时候,调用的doom模型为空,导致了其图片没有加载出来 解决办法: 在客户端webView.getSet

Android WebView执行GPU命令的过程分析

Android WebView使用的Chromium引擎,虽然没有自己的GPU进程或者线程,但是却可以执行GPU命令.原来,Android WebView会给它提供一个In-Process Command Buffer GL接口.通过这个接口,Chromium引擎就可以将GPU命令提交给App的Render Thread执行.本文接下来就详细分析Android WebView执行GPU命令的过程. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 从前面Ch

android WebView详解,常见漏洞详解和安全源码(下)

上篇博客主要分析了 WebView 的详细使用,这篇来分析 WebView 的常见漏洞和使用的坑. 上篇:android WebView详解,常见漏洞详解和安全源码(上) 转载请注明出处:http://blog.csdn.net/self_study/article/details/55046348 对技术感兴趣的同鞋加群 544645972 一起交流. WebView 常见漏洞 WebView 的漏洞也是不少,列举一些常见的漏洞,实时更新,如果有其他的常见漏洞,知会一下我-- WebView

Android WebView 加载超长 JS 数据

在之前的文章里面,我总结过WebView如何与网页交互,也就是Java如何和JS交互 -- Android WebView 总结 -- Java和JavaScript交互. 基于这篇文章,我们基本上能完成绝大部分交互的逻辑.但是,因为业务需要,最近加载的JS都是超长的数据,但测试发现在Android 16及以下的手机上,能正常使用,但是在17 及以上的手机上,发现JS没有执行. 这是因为,WebView在Android 17及以后对之前的WebView存在的安全问题做了调整.那怎么办呢?答:使用

android webview点击返回键返回上一级activity

android webview点击返回键返回上一个activity 1 @Override 2 public boolean onKeyDown(int keyCode, KeyEvent event) { 3 // TODO Auto-generated method stub 4 if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { 5 return true; 6 } 7 return super

Android多线程分析之二:Thread的实现

Android多线程分析之二:Thread 罗朝辉 (http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 在前文<Android多线程分析之一:使用Thread异步下载图像>中演示了如何使用 Thread 处理异步事务.示例中这个 Java Thread 类都是位于 Framework 层的类,它自身是通过 JNI 转调 dalvik 里面的 Thread 相关方法实现的.因此要分析 Androd 中的线程,就需要分析这两层中的与线程相关的代码,这就是本文要