EventBus基本分析

2019-02-13  本文已影响0人  世道无情
1. EventBus使用分析

代码参照 鸿洋博客

下边通过EventBus基本使用,分析它的流程
ItemListFragment代码如下:

public class ItemListFragment extends ListFragment {

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        // 订阅事件
        EventBus.getDefault().register(this);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        // 开启线程加载列表
        new Thread(){
            @Override
            public void run() {
//                super.run();
                try {

                    // 模拟子线程,加载网络数据,然后调用下边方法发布事件
                    Thread.sleep(2000);
                    // 发布事件
                    EventBus.getDefault().post(new Event.ItemListEvent(Item.ITEMS));

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }

    /**
     * 点击ListView的item发布事件
     */
    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        // 发布事件
        EventBus.getDefault().post(getListView().getItemAtPosition(position));
    }


    /**
     * 如果方法名以onEvent开始,表示要订阅一个事件,MainThread表示该方法在主线程中执行
     * 只要一发布事件,就执行此方法
     */
    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()));
    }

    @Override
    public void onDestroy(){
        super.onDestroy();
        // 取消事件
        EventBus.getDefault().unregister(this);
    }
}

分析上边流程:
1>:在 onCreate中执行 EventBus.getDefault().register(this)目的:
让EventBus扫描这个类,把 所有 onEvent开头的方法用 map存储,
key:onEvent方法的参数类型,value:所有onEvent方法;
在onCreate执行完后,onEventMainThread方法就 以键值对 存储到 EventBus 中了;

2>:在 子线程执行完后,调用 Event.getDefault().post(参数) , 根据 post的参数,在map中 查找对应的onEventMainThread方法,然后用 反射 执行 onEventMainThread方法更新数据;

上一篇下一篇

猜你喜欢

热点阅读