标签: otto

如何使用Otto事件总线将事件从Service发送到Activity?

简单的BusProvider.getInstance().post()不是例外main thread.如何使用Otto事件总线将事件从Service发送到Activity?

android otto

58
推荐指数
2
解决办法
3万
查看次数

奥托vs LocalBroadcast:

我非常喜欢开源贡献广场已经对Android社区做了什么,并正在调查他们的最新贡献Otto(事件总线)

http://square.github.io/otto/

深入挖掘我看到Otto使用反射并且没有有序广播(一种模式,其中未消息的消息从一个接收器传递到下一个接收器,听取相同类型的事件)Otto相信更多的火灾和忘记模型.

现在android LocalBroadcastManager在其v4支持库中有(LBM)用于相同的目的,尽管它更笨重并且对传递的对象有更多限制.但在更明亮的一面,它确实支持有序广播,它更像是正常的广播.

Otto和LBM都处于相同的处理空间内,因此就速度而言,我猜两者都是相同的.我能看到的唯一真正的区别是Otto允许您定义自定义事件,而您不必序列化/包裹对象.

因此,我真正的问题是,如果LBM做同样的事情,你何时会使用Otto.

参考文献:

http://nick.perfectedz.com/otto-event-system/

使用Intents或事件总线在同一个应用程序中进行通信

https://plus.google.com/107049228697365395345/posts/6j4ANWngCUY

android android-intent otto localbroadcastmanager

44
推荐指数
2
解决办法
8728
查看次数

使用像Otto或EventBus这样的事件库是一种处理活动,片段和后台线程之间关系的推荐方法

在大多数情况下,处理案件时

  • 用户thread(AsyncTask)执行后台处理
  • 将计算结果传回给ActivityFragment
  • Activity或者Fragment在用户线程完成后台处理之前可能会重新创建

到目前为止,从许多可靠的来源,我可以看到推荐的方法是使用 保留片段

来源

我不时地听说事件总线库可以处理活动,片段和后台线程之间的关系.(请参阅https://github.com/greenrobot/EventBus.它表示在活动,片段和后台线程表现良好)

我遇到了一些非常受欢迎的事件总线库

我想知道,当处理活动,碎片和后台线程之间的关系时,事件总线方法与保留碎片方法有何不同?

推荐哪种方式?

android event-bus android-asynctask otto greenrobot-eventbus

44
推荐指数
1
解决办法
2万
查看次数

使用Intents或事件总线在同一个应用程序中进行通信

我了解如何使用Intents与系统/其他应用程序进行通信.我了解如何在同一个应用程序中使用Intent.我也了解如何使用Otto在同一个App中进行通信.

使用Otto vs. Intents在我的活动/服务之间进行交流的Pro/Cons是什么?

android android-intent otto

25
推荐指数
1
解决办法
6059
查看次数

哪些Activity生命周期方法最适合注册/注销到事件总线?

在活动中注册注销事件总线(如otto,EventBus或tinybus)的最佳位置是什么?为什么?

  1. 的onCreate() - 的onDestroy()
  2. 在onStart() - 的onStop()
  3. 的onResume() - 的onPause()

Otto的例子使用onResume() - onPause(),EventBus提到onStart() - onStop(),我们需要在我们的应用程序中使用onCreate() - onDestroy()来更新活动的UI,即使它在后台也是如此.所以我想它可以是三个中的任何一个,取决于事件的性质和它们的处理,但我想知道是否还有其他任何应该考虑的事情.

android otto greenrobot-eventbus

23
推荐指数
2
解决办法
1万
查看次数

ClassNotFoundException:没有找到类"android.os.PersistableBundle"Otto Android 5.0

我有一个奇怪的问题.我有一个应用程序,我部署在Android 4.4设备上并使用Otto库.我在Android 5.0设备上部署了该应用程序.它仍然有效.我重新尝试了4.4,该应用程序将无法启动.

显然,它试图使用API​​ 21类的PersistableBundle.class.在这里我的日志:

    Caused by: java.lang.ClassNotFoundException: Didn't find class "android.os.PersistableBundle" on path: DexPathList[[zip file "/data/app/fr.myapp.apk"],nativeLibraryDirectories=[/data/app-lib/fr.myapp, /vendor/lib, /system/lib]]
            at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
            at java.lang.Class.getDeclaredMethods(Native Method)
            at java.lang.Class.getDeclaredMethods(Class.java:656)
            at com.squareup.otto.AnnotatedHandlerFinder.loadAnnotatedMethods(AnnotatedHandlerFinder.java:52)
            at com.squareup.otto.AnnotatedHandlerFinder.findAllProducers(AnnotatedHandlerFinder.java:126)
            at com.squareup.otto.HandlerFinder$1.findAllProducers(HandlerFinder.java:33)
            at com.squareup.otto.Bus.register(Bus.java:191)
Run Code Online (Sandbox Code Playgroud)

android classnotfoundexception otto android-5.0-lollipop

20
推荐指数
1
解决办法
2万
查看次数

RuntimeException:无法调度event @ otto

我们当前的app-version与otto的EventHandler存在问题.我们RuntimeException在崩溃日志中获得了一个以下描述:

"原因:java.lang.RuntimeException:无法调度事件:classcom.nameOfBrand.ui.events.SwitchFragmentEvent to handler [EventHandler public void com.nameOfBrand.ui.activities.MainActivity.onSwitchFragmentEvent(com.nameOfBrand.ui.events.SwitchFragmentEvent) )]"

我们有一个按钮,在onClickListener中我们自动定义SwitchFragmentEvent.在一些奇怪的情况下,框架无法调度事件并抛出一个RuntimeException.

带按钮的片段延伸AbstractResultListFragment,这个片段延伸AbstractFragment.我们在AbstractFragement的onResume中注册EventBus,并在onPause上注销它.一切正常,除了这一个按钮:/

有没有人有这样的想法或曾经做过这样的事情?

更新: Scompt是对的.RuntimeException是从我们的代码中的NullPointerException的原因引发的.谢谢

提普:阅读你的崩溃日志直到最后;)

java android runtimeexception otto

15
推荐指数
1
解决办法
9608
查看次数

Fragment实例中带有Otto事件总线的IllegalArgumentException

我正在使用Otto Event总线订阅ListFragment中的某些事件.总线实例在Application的子类中存储和创建,换句话说,它应该作为单例工作.看来这不是一个案例......

该片段正在注册到总线onActivityCreated(Bundle)并取消注册onDestroy().这不起作用.我从调用应用程序崩溃的设备获得了几个崩溃报告unregister()(java.lang.IllegalArgumentException:缺少注释方法的事件处理程序......).如果unregister()在调用register()之前调用,或者unregister()调用两次,则抛出此异常.这可能只发生在......

  • onActivityCreated(Bundle)之前没有打过电话onDestroy().
  • onDestroy() 被叫两次.
  • Application实例调用之间重建onActivityCreated(Bundle)onDestroy().

我的应用类:

public class App extends Application {

    private static App sInstance;

    private Bus bus;

    public static App getInstance() {
        return sInstance;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        sInstance = this;
        bus = new Bus(ThreadEnforcer.ANY);
    }

    public Bus getEventBus() {
        return bus;
    }

}
Run Code Online (Sandbox Code Playgroud)

Fragment类:

public class MyFragment extends ListFragment {

    @Override
    public void …
Run Code Online (Sandbox Code Playgroud)

android activity-lifecycle android-fragments otto fragment-lifecycle

13
推荐指数
1
解决办法
9166
查看次数

跨多个进程的Otto/EventBus

是否可以post在一个进程中进行事件(例如,SyncAdapter其中包含android:process=":sync"manifest属性)并使用OttoEventBus在另一个进程中(在常规应用程序UI中)接收它?

我知道,IntentBroadcastReceiver跨多个进程通信工作得很好,但我想有简单性和灵活性奥托/ EventBus.

android android-syncadapter otto greenrobot-eventbus

12
推荐指数
1
解决办法
3439
查看次数

处理搜索的最佳实践

我有一个SearchView设置,我有一个松散的解耦架构使用RetrofitOtto.

我想知道Android中的搜索或者任何移动应用程序的最佳实践是什么(意味着类似的东西也可以应用于iOS).

具体来说,我正在使用一个AutoCompleteTextView来处理我的建议,SearchView数据直接来自API.我不相信这是一种最佳实践,因为每次用户更改文本时SearchView都会启动API调用.

我正在考虑在SQLite中存储一个Cache然后从那里ping结果,但是如果用户想要最直接的数据呢?你会怎么处理?采用什么样的模式?

非常感谢有关Android中搜索的最佳架构或方法的任何想法.

search android searchview otto

12
推荐指数
2
解决办法
1406
查看次数