【发布时间】:2020-01-09 13:45:52
【问题描述】:
我正在尝试使用 Coroutines 从我的 BottomNavBar 打开一个 WebView,但出现此错误:
java.lang.RuntimeException: java.lang.Throwable: 一个 WebView 方法是 在线程“DefaultDispatcher-worker-1”上调用。所有 WebView 方法 必须在同一个线程上调用。
我的代码如下所示:
class WebViewFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_web_view, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
openWebView()
}
private suspend fun showWebView(){
if(webView != null){
webView!!.webViewClient = WebViewClient()
webView!!.webChromeClient = WebChromeClient()
val webSettings = webView!!.settings
webSettings.javaScriptEnabled = true
webView!!.loadUrl("https://www.google.com")
webView!!.webViewClient = object: WebViewClient(){
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
progressBar.visibility = View.VISIBLE
super.onPageStarted(view, url, favicon)
}
override fun onPageFinished(view: WebView?, url: String?) {
progressBar.visibility = View.GONE
super.onPageFinished(view, url)
}
}
}
}
private fun openWebView(){
runBlocking(Dispatchers.Default) {
showWebView()
}
}
}
有没有最好的方法来实现这一点? WebView 可以加载到另一个线程而不是 UI 线程上吗?
谢谢:
【问题讨论】:
标签: android multithreading kotlin webview kotlin-coroutines