六、封装EventBus

EventBus是针一款对Android的发布/订阅事件总线。它可以让我们很轻松的实现在Android各个组件之间传递消息,并且代码的可读性更好,耦合度更低。

一、代码集成

1、下载jar包,并且添加library

2、写一个接受消息的虚类

public abstract class OnEvent {

    @Subscribe(threadMode = ThreadMode.MainThread)
    public void onMessage(TestEvent event) {onReceived(event);}

    public abstract void onReceived(TestEvent event);
}
3、写一个传递消息内容的类

public class TestEvent {
    public int num;
    public String value;
}
4、EventBus处理

public class EventManager {

    public static void register(Object object) {
        if (!EventBus.getDefault().isRegistered(object)) {
            EventBus.getDefault().register(object);
        }
    }

    public static void unregister(Object object) {
        if (EventBus.getDefault().isRegistered(object)) {
            EventBus.getDefault().unregister(object);
        }
    }

    public static void post(Object object) {
        EventBus.getDefault().post(object);
    }

    public static void postTest(int num, String value) {
        TestEvent event = new TestEvent();
        event.num = num;
        event.value = value;
        post(event);
    }
}
二、使用EventBus的封装类

1、注册event事件

// 注册EventBus
EventManager.register(event);
2、处理业务

    private OnEvent event = new OnEvent() {
        @Override
        public void onReceived(TestEvent event) {
            nameTextView.setText(event.num + "\n" + event.value);
        }
    };
3、在另外一个activity发送event

EventManager.postTest(1, "aaa");
三、遇到的坑

异常:

原因:接收消息的类OnEvent 中的onMessage方法写成了private,但是该方法是给EventBus回调的,写成private则会造成无法回调,修改成public即可。

C#中的EventBus可以用于在不同的组件之间进行通信,尤其是在大型项目中。封装EventBus可以让使用者更方便地注册、注销和发布事件。 以下是一个简单的EventBus封装示例: ```csharp using System; using System.Collections.Generic; public class EventBus { private Dictionary<Type, List<Delegate>> eventHandlers = new Dictionary<Type, List<Delegate>>(); public void Register<T>(Action<T> handler) { if (!eventHandlers.ContainsKey(typeof(T))) { eventHandlers.Add(typeof(T), new List<Delegate>()); } eventHandlers[typeof(T)].Add(handler); } public void Unregister<T>(Action<T> handler) { if (eventHandlers.ContainsKey(typeof(T))) { eventHandlers[typeof(T)].Remove(handler); } } public void Publish<T>(T e) { if (eventHandlers.ContainsKey(typeof(T))) { foreach (Action<T> handler in eventHandlers[typeof(T)]) { handler(e); } } } } ``` 使用时,可以先实例化一个EventBus对象,然后通过Register方法注册事件处理程序,使用Unregister方法注销事件处理程序,最后使用Publish方法发布事件。 例如: ```csharp public class MyEvent { public string Message { get; set; } } public class MyComponent { private EventBus eventBus; public MyComponent(EventBus eventBus) { this.eventBus = eventBus; eventBus.Register<MyEvent>(HandleMyEvent); } private void HandleMyEvent(MyEvent e) { Console.WriteLine(e.Message); } } class Program { static void Main(string[] args) { EventBus eventBus = new EventBus(); MyComponent component = new MyComponent(eventBus); eventBus.Publish(new MyEvent { Message = "Hello world!" }); Console.ReadLine(); } } ``` 在上面的示例中,当MyEvent事件发布时,MyComponent的HandleMyEvent方法将被调用,并输出事件消息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值