You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在@JavascriptInterface中调用WebView.loadUrl致应用崩溃求助

问题分析

核心问题是:被@JavascriptInterface注解的方法默认运行在JavaBridge线程,而WebView的所有操作必须在主线程(UI线程)执行,直接在getTestData()里调用webview.loadUrl()会触发跨线程操作的崩溃。

解决方法

有两种常用的主线程调度方式:

方法一:使用Activity的runOnUiThread

如果你的类是Activity,直接用runOnUiThread包裹WebView操作:

@JavascriptInterface
fun getTestData(){
    runOnUiThread {
        webview.loadUrl("https://www.facebook.com")
    }
}

方法二:使用Handler绑定主线程Looper

如果你的类不是Activity(比如Fragment或自定义类),可以创建绑定主线程的Handler:

// 在类中初始化主线程Handler
private val mainHandler = Handler(Looper.getMainLooper())

@JavascriptInterface
fun getTestData(){
    mainHandler.post {
        webview.loadUrl("https://www.facebook.com")
    }
}

补充说明

  • WebView的核心操作(loadUrl、evaluateJavascript、addJavascriptInterface等)都必须在主线程执行,这是Android WebView的硬性要求。
  • JavaBridge线程是WebView用于处理JS与原生交互的后台线程,不能直接在此线程操作UI组件。

内容的提问来源于stack exchange,提问作者YadavK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 15:55:24