【问题标题】:Roboguice, AndroidAnnotations and events between threadsRoboguice,AndroidAnnotations 和线程之间的事件
【发布时间】:2012-01-17 22:32:34
【问题描述】:

当 RoboGuice 触发 Event 时,我的事件回调将在哪里执行,在哪个线程中? 例如,我有一个活动(@Observes OnUpdateUiEvent e)。我还有一个触发新 OnUpdateUiEvent("data") 的后台线程。那么,按照我的理解,我的 do() 方法将在 bg 线程中执行吗?如果我用 AndroidAnnotations 中的 @Background 注释 do() 会怎样?预处理器是否应该在 runInUiThread() 中调用 do()?

如果一切正常,我认为这种模式将提供线程之间最简单的通信方式。

【问题讨论】:

    标签: android events concurrency roboguice android-annotations


    【解决方案1】:

    据我所知herethere,您可以通过使用@Observes(EventThread.CURRENT)、@Observes(EventThread.UI) 或@Observes 来指定线程应与RoboGuice 中的事件混合的方式(EventThread.BACKGROUND)。

    默认为“CURRENT”,表示如果不指定任何内容,事件监听方法将与接收事件的方法在同一个线程中执行。

    是的,如果您从后台线程触发事件,do() 将在后台线程中执行。

    如果您在 do() 方法上添加 @Background,那么它将始终在一个单独的线程中执行,与您触发事件的线程不同。

    如果您不确定,请设置断点并查看线程名称 :-)。

    这回答了你的问题吗?

    【讨论】:

    • 谢谢你的回答(也看到了你在群里的帖子)。如果我理解正确,当我们设置背景线程时,应用程序会为我们的回调生成新线程?
    • 嗯,基本上是这样,但不完全是。事实上,它使用了 25 个线程的 FixedThreadPool 中的一个线程,该线程用于 RoboGuice 的 SafeAsyncTask。以下是要了解发生了什么的类:EventListenerThreadingDecorator 然后AsynchronousEventListenerDecorator
    • 感谢您的回答,可能会有所帮助
    • @Piwaï RoboGuice 不会跳过一个重要的细节吗?当对象消失时,即从EventManager 取消注册。我认为这必须是手动步骤,而不是自动完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多