kotlin中如何在service中调用activity中handler对象?
时间: 2024-02-06 14:10:33 浏览: 74
在Kotlin中,可以通过以下步骤在Service中调用Activity中的Handler对象:
1. 首先,在Activity中定义一个公共的静态Handler对象,以便Service可以访问它。
```kotlin
companion object {
const val MSG_FROM_SERVICE = 1
val mHandler: Handler = object : Handler() {
override fun handleMessage(msg: Message) {
when (msg.what) {
MSG_FROM_SERVICE -> {
// 处理Service发送的消息
}
}
}
}
}
```
2. 在Service中,创建一个Messenger对象,并将其与Activity中的Handler对象绑定。
```kotlin
class MyService : Service() {
private lateinit var messenger: Messenger
override fun onCreate() {
super.onCreate()
messenger = Messenger(Activity.mHandler)
}
override fun onBind(intent: Intent?): IBinder? {
return messenger.binder
}
}
```
3. 在Service中,通过Messenger对象向Activity中的Handler对象发送消息。
```kotlin
class MyService : Service() {
private lateinit var messenger: Messenger
override fun onCreate() {
super.onCreate()
messenger = Messenger(Activity.mHandler)
}
override fun onBind(intent: Intent?): IBinder? {
return messenger.binder
}
private fun sendMessageToActivity() {
val msg = Message.obtain(null, Activity.MSG_FROM_SERVICE, 0, 0)
try {
Activity.mHandler.sendMessage(msg)
} catch (e: RemoteException) {
e.printStackTrace()
}
}
}
```
这样,Service就可以通过Messenger对象向Activity中的Handler对象发送消息了。
阅读全文