android - Kotlin (Android) - 如何从一个线程发布自定义事件并在主线程中监听该事件?
问题描述
我是 Kotlin 的新手,我正在努力寻找一种方法来从线程内广播自定义事件(附加数据)并在主线程中捕获和处理该事件。
我想从我的主要活动中收听事件......
package com.example.myapp
import android.Manifest
import android.annotation.SuppressLint
import android.content.pm.PackageManager
import android.graphics.Bitmap
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.core.content.ContextCompat
class MainActivity : AppCompatActivity() {
lateinit var contentWebView: WebView
@SuppressLint("JavascriptInterface")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if (supportActionBar != null) {
supportActionBar?.hide()
}
contentWebView = findViewById(R.id.contentWebView)
contentWebView.settings.javaScriptEnabled = true
contentWebView.webViewClient = object : WebViewClient() {
override fun onPageStarted(view: WebView, url: String, favicon: Bitmap?) {
// Page loading started handler
}
override fun onPageFinished(view: WebView, url: String) {
// Page loading finished handler
}
}
contentWebView.loadUrl("file:///android_asset/index.html")
contentWebView.addJavascriptInterface(InterfaceToast(this), "toast")
/* configure listener for custom event here */
}
}
并从我的 js 接口广播它...
package com.example.myapp
import android.content.Context
import android.webkit.JavascriptInterface
import android.widget.Toast
/** Instantiate the interface and set the context */
class InterfaceToast(private val mContext: Context) {
/** Show a toast from the web page */
@JavascriptInterface
fun show(toast: String) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show()
/* trigger custom event with String data attached here */
}
}
如果有人能指出我正确的方向,我将不胜感激。
解决方案
使用处理程序..处理程序可以将您的事件从您的线程发布到主线程..
推荐阅读
- javascript - 我如何处理异步请求,因为这不起作用,它应该通过响应发出警报
- mysql - MySQL优化使用不等于运算符时执行慢的查询
- r - 使用灵活包在 r 中运行模型时下标越界
- ruby-on-rails - 使用 rails_ujs 和 Webpacker 在 Ajax 调用中包含 CSRF 令牌
- sql - 查找 MAX 列 BigQuery SQL
- kubernetes - Kubernetes 环境文件
- blazor - 在 Blazor 中,如何使对注入对象的更改反映在所有组件中?(又名反应性)
- vba - 在 Word VBA 中使文本的一部分成为超链接
- javascript - 如何在 javascript 数组中找到对象值?
- python - 由于 Python 包不兼容而在 Windows 上运行 Linux