问题标签 [greenrobot-eventbus]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1745 浏览

android - 订阅者类 android.app.Application 没有称为 onEvent 的公共方法

我已将我的一些视图从 Activity 委托给一个名为 BottomBar 的类。

我想要的是当我返回按钮将事件发送到 BottomBar 以便开始播放动画时。

这是我的 onBackPressed() 代码,我在 BottomBar 有 onEvent :

当然,我在 Activity 上注册/取消注册 EventBus,然后我尝试在 BottomBar 类上注册 eventBus,但我得到了帖子标题中的异常:

该应用程序在我为 BottomBar 类注册 EventBus 的行处崩溃:

0 投票
1 回答
176 浏览

android - 从接收事件中排除发送者(Greenrobot 的 Eventbus)

我有一个类,它是放在 Eventbus 上的对象(一种类型)的发送者和接收者。

有没有办法将发件人排除在接收事件之外?我有多个发件人,只想接收来自其他发件人的事件,而不是我自己。

例子:

A 将 RED 放在公共汽车上。接收器 C 和 D 得到事件 RED。但是 A(因为它是为颜色事件注册的)也得到 RED。这可以避免吗?那么在这种情况下(A是发送者)A不应该是接收者吗?

谢谢

0 投票
4 回答
676 浏览

java - Difficulty in understanding complex multi threading in Android app

I have big problem with understanding multi threading in my application and because of that finding a bug. I've checked I think all possibilities and still I am getting various (sometimes unexpected) errors.

Maybe someone here will be able to advice me, what I should do.

In my project I am using two external libraries:

  • GraphView - provides views for graph drawing
  • EventBus - provides interface for easy communication between app components

As for the app it has the structure like this:

The idea is that ProcessThread computes data and provides constant stream of values to GraphFragment throught EventBus. In GraphFragment I have one Series required by GraphView.

To update graphs in real time according to the example I need to make a new Runnable so I did one:

and when I start it from fragment's onResume() method everything is working like a charm.

Unfortunately as I've mentioned I am using external data from another thread. To get it inGraphFragment I am using (according to the documentation) onEventMainThread() method.

And in here no matter what I'll do I can't pass data to update my graph in PlotsRun object. So far I've tried:

  • using Queue - add value in onEventMainThread and get in PlotsRun. It turned out that runnable is reading faster than method is able to update queue.
  • creating various buffers - the result is quite this same as with Queue.
  • calling mSeries1.appendData(new DataPoint(counter, getRandom()), true, 100); directly from onEventMainThread - at some point it gets freez.
  • creating onEvent() method inside my runnable and call from there mHandler.post() - it is blocking UI and updates looks like snapshots.
  • using everything mentioned with or without synchronized() block.

What is quite difficult for me to understand is this runnable which is working correctly (at some point).

As it is said on official Android blog you can't update UI from non UI thread. This is why I can't use another thread inside GraphFragment. But when I've checked my runnable it is running on main thread (UI). This is why I can't create infinite while loop there instead have to call mHandler.post(this).

And still it behaves like another thread because it is faster (called more frequently) then onEventMainThread method.

What can I do to be able to update my graphs (or where I should look) using data from ProcessThread?

EDIT1:

Answering on @Matt Wolfe request I am including what I think is the most important part of a code for this problem with all required variable shown how they are declared. It is very simplified example:

MainActivity:

GraphFragment:

The if in runnable is added for protection because of this to fast reading problem. But it shouldn't be here because there should always be something (at least I expect that).

One more thing to add - when I put simple Log.d and counting variable inside onEventMainThread it was updating and displaying it's value correctly, but unfortunately logcat isn't main UI.

EDIT2:

This is mainly response for @MattWolfe comment

The mHandler is just variable declared and created in GrapgFragment:

Yes, that is right I am using mHandler.post() without any delay. I'll try using some delay to see if there is any difference.

What I didn't mention earlier is that the ProcessThread is providing also data to other fragments - don't worry they don't interfere with each other or share any resources. This is why I am using EventBus.

EDIT3:

This a code that I've used as my another idea with another thread in GraphFragment and runOnMainThread method:

Unfortunately, it isn't working neither.

0 投票
1 回答
769 浏览

android - Eventbus - 如何注销 POJO?

我应该如何以及在哪里取消注册独立于 android 生命周期的 POJO 中的 EventBus?(没有 onCreate-,没有 onDestroy 方法)

提前致谢

0 投票
1 回答
915 浏览

android - IntentService 中的 EventBus 响应

在实现 IntentService 类的 onHandleIntent(Intent inte) 时,我需要调用添加到另一个类中的 Web 服务,例如“Webservices.Class”。通过 EventBus.getDefault().post(new ResponseEvent()),它正在传递响应所有活动/片段等,但它没有在我调用的 intentService 类中传递响应。有人遇到过这种情况吗?

我使用onEventMainThread(ResponseEvent event)来接收响应

提前致谢。

0 投票
1 回答
92 浏览

android - 不同线程中相同方法的意外行为

我最初的问题是:Android GraphView project get freeze with real time updates。在这篇文章中,我询问了 3 个绘图的 UI 线程中可能存在的并发性。在内存分配图中,它看起来像这样:

在此处输入图像描述

我直接从我ProcessThread的主要活动中接收数据,并使用onEventMainThreadEventBus库将其传递回GraphFragment. 传递的所有数据都ProcessThread来自蓝牙监听服务收集数据,然后继续获取有意义的数字。

我的想法是测试仅生成数据并将其发送到onEventMainThread. 因为这也会产生一些错误,所以我不得不问另一个问题:Difficulty in understand complex multi threading in Android app。一段时间后,我从@AsifMujteba 收到了很好的回答,解释说我的测试线程太快了。

知道我能够回到我的主要问题和我的真实线程来检查所有时间是否正确。正如我所说,有很多事情发生,所以快速不是问题(但是,我添加了同样的机制来测试数据是否没有快速发送)。我会更担心减慢这个线程的工作。

我现在的onEventMainThread样子是这样的:

不幸的是,当我回到开头时,问题又出现了。经过大量测试后,我可以说数据看起来正在正确发送。我用两个标记检查了它:

Logcat 消息显示正确。不幸的是,即使发送看起来与我的测试线程中的相同,也会出现错误:

更重要的是,我确信数据始终正确发送,因为当我使用 OpenGL 可视化测试另一个片段时,一切正常。

所以总结一下:

EventBus当使用从一个(非常简单的)线程向片段发送值时,一切正常,而从另一个(更复杂的)线程发送以冻结显示并显示内存分配图结束。重要的是要知道,如果一个线程正在运行,第二个线程将被注释掉。

有人可以告诉我这里可能有什么问题吗?或者我应该检查更多?

编辑

我又做了一项测试,将有关系列数据的所有内容都注释掉,只留下Log.d(),没有出现错误。有趣的是,图形更新的阻塞(或冻结)不会影响 UI 本身,所以我仍然可以按下所有按钮等等。

0 投票
1 回答
3746 浏览

android - 无法解决:'de.greenrobot:eventbus:2.4.0'

我正在使用 Android Studio,但是当我尝试在我的应用程序组件的 gradle 文件中添加:compile 'de.greenrobot:eventbus:2.4.0'时,我得到一个横幅:项目同步成功。打开“消息”视图以查看发现的错误。在消息窗格中,它显示错误消息:dependencies

在 github 上检查EventBus时,我发现maven central上确实存在最新版本。

可能是android studio配置错误还是什么?

以下是可以正常工作的其余依赖项(没有事件总线依赖项):

0 投票
2 回答
2862 浏览

android - 构建 proj 时的 EventBus 异常 - 订阅者类没有称为 onEvent 的公共方法

因此,我的应用程序在 MainActivity 与后台服务之间交换消息,我使用EventBus来处理它。我正在注册这两个组件

在他们的 onCreates 上。我正在发送/接收一个事件:

当我将项目从我的 AndroidStudio 运行到我的测试手机时,一切正常。但是,当我生成签名的 APK 时,我安装了该应用程序并发生了崩溃,并出现以下异常:

它显然有的地方。我尝试在我的 MainActivity 中将其从更改为onEventonEventMainThread但没有成功。自从我即将发布应用程序以来,这非常令人沮丧,现在我无法解决这个问题。

我经历过这个这个,但他们没有帮助。

有任何想法吗?

0 投票
0 回答
59 浏览

java - 在 Typed 类上调用“.class”(例如 MyClass。班级)

我正在尝试在 GreenRobot 的EventBus类中使用一个函数:

这适用于普通类,例如:


现在,我想摆脱定义只包含单个对象(例如MyStringEvent, MyIntegerEvent)并使用泛型(例如MyEvent<String>, MyEvent<Integer>)的类。但是,以下代码不再起作用:


有没有合适的方法来处理这个用例?

0 投票
4 回答
4096 浏览

android - Android注解和EventBus

我在库中有一个带注释的 Activity,它是来自同一库的 EventBus 事件的订阅者。它看起来像这样,大大简化:

它应该按照以下方式工作:

http://timnew.me/blog/2014/09/14/otto-and-android-annotations-compatibility-issue-analysis/

但实际上它返回此错误:

无法启动活动... de.greenrobot.event.EventBusException:订阅者类 com.foo.bar.activities.Foo_ 没有称为 onEvent 的公共方法

似乎 EventBus 不在父类中。我猜每个人都在谈论的@Subscribe 注释只在 Guava 和 Otto 中,而不是在 EventBus 中。没有人在网上谈论 AA 和 Eventbus 之间的兼容性问题,所以我一定遗漏了一些东西。

我怎样才能使这项工作?

事件总线:2.4

机管局:3.2

编辑

在 WonderCsabo 的回答之后,我将 EventBus 更新为 3.0 beta(包括订阅注释),将 AA 更新为 3.3.1,问题就消失了,但还有另一个问题:

而且我注意到这两个问题(缺少 onEvent 和现在 PostThread 只是发布版本上的一个问题。我使用 ProGuard 以及 EventBus 和 AA 的推荐例外)。

编辑 2

我添加了

它似乎正在工作。