【发布时间】:2017-08-25 21:36:26
【问题描述】:
我在做什么:
我在MainActivity.Java 有一个订阅者
我已经注册OnStart的活动
@Override
public void onCreate() {
super.onCreate();
//Register the event bus for the screen
EventBus.getDefault().register(this);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(BusCategories event) {
//On Click of Categories Label
}
然后,我在FragmentA 中有一个发布者
EventBus.getDefault().post(new BusCategories(mUploadProducts.getCategories()));
所以 Fragment 中的一个事件是在 main Activity 中触发调用
- 这是有效的,但说我在手机中进入省电模式 onPause 被触发并再次返回订阅者永远不会得到 触发
- 如何正确处理此问题
【问题讨论】:
-
我不会订阅
onCreate,而是订阅onStart或onResume,并且会(分别)取消订阅onStop或onPause(取决于您选择哪一个)。 -
@MartinMarconcini 订阅 onStart 或 onResume 如何解决这里的问题?
-
在我们看到 OP 在这两种方法中所做的事情之前,鉴于提供的信息量,我们无法判断。但是,我仍然会遵循按预期使用生命周期的做法。更不用说我不会使用事件总线开始......
-
@Ritesh ...对不起,我在 OnStop 中取消注册 .... 这就是问题 .... 在 OnDestroy 中取消注册后 ...它的工作 .... 最佳做法是 OnCreate 。 . 注册和 OnDestroy 注销 :)
-
@MartinMarconcini 冷静的人..!!查看他的代码,他已在 onCreate() 中注册,以及如果您在 onStart() 或 Stop() 中执行相同操作,它是如何工作的。我很好奇,所以问,这怎么可能。而且,你应该回答同样的问题,而不是说“这是另一个问题的话题”。是的 onCreate() 和 onDestory() 不是最佳实践,它实际上取决于您的用例,通常注册和取消注册应该发生在 onStart() 和 onStop() 中。我在这里做对了..!!
标签: android android-fragments greenrobot-eventbus