为啥EventBus不能传递数据到一个新建的Activity

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥EventBus不能传递数据到一个新建的Activity相关的知识,希望对你有一定的参考价值。

1 eventbus是必须先订阅,才能传值的,你新activity还没有生成,也就还没有订阅成功,你就 post值,肯定是接收不到的。
2 先post的,再rigister的,肯定没有获取不到数据。
3 EventBus要先生产(注册)才能消费(订阅),新的activity没有注册监听,它怎么能收到订阅
4 有一个叫delayXXX的方法可以
参考技术A 我是在新建的Activity中订阅了
代码如下:
MainActivity中的Oncreat方法中Post;然后点击按钮在跳转到新Activity,在新的Activity中的Oncreat方法register(this),MainActivity中Post的内容传递不到新的Activity中

EventBus的简单使用

文章中引用了张鸿洋大神的博客,链接在此:http://blog.csdn.net/lmj623565791/article/details/40794879 和 http://blog.csdn.net/lmj623565791/article/details/40920453

此文章为本人学习记录所用,如有不对,欢迎指正!

进入正题

使用步骤:

  1.新建一个类

  2.在使用页面进行注册/反注册/传递数据

  3.在接收页面进行接收

具体代码:

  1.新建一个类

public class Event
{
public static class ItemListEvent
{
private List<Item> items;

public ItemListEvent(List<Item> items)
{
this.items = items;
}

public List<Item> getItems()
{
return items;
}
}
}
  2.在使用页面进行注册/反注册/传递数据
    a.注册语句,注册的作用是当页面创建时,先扫描整个页面,把所有onEvent的方法全部以键值对的方式存储起来,这样当执行传递数据语句时,根据传入的参数,直接从Map中找出对应的方法,利用反射进行调用
      EventBus.getDefault().register(this);
    b.反注册语句
      EventBus.getDefault().unregister(this);
    c.传递数据语句
      EventBus.getDefault().post(new Event.ItemListEvent(Item.ITEMS));
  3.在页面进行接收
    此处需要明确一个问题,就是EventBus包含4个ThreadMode:onEventpostThread、onEventMainThread、onEventBackgroundThread、onEventAsync。其中:
    onEventpostThread:表示当前方法会在当前发布事件的线程里执行
    onEventMainThread:表示无论发布事件是在哪个线程,都会在主线程中执行
    onEventBackgroundThread:表示如果发布事件的线程并非主线程,则直接在同一线程里执行,但是如果发布事件的线程是主线程,则直接加入后台任务池队列,只用线程池一个接着一个调用
    onEventAsync:和onEventBackgroundThread相似,但不同的是没有onEventBackgroundThread中的一个接着一个调用,而是直接调用
    接收时需要调用onEventpostThread、onEventMainThread、onEventBackgroundThread、onEventAsync方法中的一个。如:
public void onEventMainThread(Event.ItemListEvent event)
{
setListAdapter(new ArrayAdapter<Item>(getActivity(),
android.R.layout.simple_list_item_activated_1,
android.R.id.text1, event.getItems()));
}

    
    

以上是关于为啥EventBus不能传递数据到一个新建的Activity的主要内容,如果未能解决你的问题,请参考以下文章

EventBus 引用

为啥我不能在 Swift 中使用从一个 UIViewController 传递到另一个(在控制台中打印数据)的数据设置标签?

EventBus的简单使用

Android消息传递之基于RxJava实现一个EventBus - RxBus

Android之利用EventBus进行数据传递

Vuex