我有两个活动,我试图将事件从活动 A 发送到活动 B,而不进入活动 B。
我正在尝试使用粘性事件总线来做到这一点,问题是如果我不进入活动 B,事件就不会触发。我不知道问题是,这是我在活动 B 中的代码
override fun onStart() {
super.onStart()
registerEventBus()
}
override fun onDestroy() {
super.onDestroy()
unregisterEventBus()
}
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
fun onStickyEventBus(case: EventBusType?) {
when (case) {
EventBusType.ONE_FOR_PAYMENT_COMPLETED ->{
// do something
removeEvent(case)
}
else -> {}
}
}
我的活动 A 上的代码:
...
postEvent(EventBusType.ONE_FOR_PAYMENT_COMPLETED,sticky = true)
扩展:
fun postEvent(event: Any?, sticky: Boolean = false) {
if (sticky) EventBus.getDefault().postSticky(event)
else EventBus.getDefault().post(event)
}
fun removeEvent(event: Any?) {
EventBus.getDefault().removeStickyEvent(event)
}
fun Activity.registerEventBus() {
if (!EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().register(this)
}
}
fun Activity.unregisterEventBus() {
if (EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().unregister(this)
}
}
很可能您已经注册到 EventBus,因为您在 OnDestroy 中取消注册,并且仅在 Activity 结束时才会调用该方法。在镜像生命周期事件(例如 OnStart/OnPause)中注册/注销是一个好习惯。将 unregisterEventBus() 移至 OnPause() 应该可以修复它。
override fun onPause() {
super.onPause()
unregisterEventBus()
}
另一种解决方案是使用 Intents 传递数据 https://www.geeksforgeeks.org/how-to-send-data-from-one-activity-to-second-activity-in-android/