美文网首页
Android消息转发中心(比EventBus更轻量)

Android消息转发中心(比EventBus更轻量)

作者: 随行的羊 | 来源:发表于2018-11-23 14:57 被阅读458次

一、简单介绍:三个类

EventBus:事件总线,很多人都用过。它可以让我们从Activity跳转到Activity,也可以从其他类跳转到Activity。

EventBus

我自己也弄了一个类似事件总线的工具,不过我称之为消息转发。对比于EventBus,iOS中有个NSNotification与它类似,当然它的功能比NSNotification更加强大。因为个人比较喜欢iOS的代码风格,所以自己封装了一个高仿的Android Notification。

Notification 文件目录

Notification由三部分组成:TCNotification、TCNotificationCenter、TCThreadMode。
TCNotificationCenter:消息转发中心,负责处理消息的一切事务,包括注册消息、传递消息和移除消息。
TCNotification:消息对象,包含了传递的对象,传递的方法名,还有消息名称。
TCThreadMode:消息返回模式,定义了采用主同步线程返回的方式还是异步线程返回的方式。

二、使用方式:三步走

1、注册通知,在oncreate中注册:

TCNotificationCenter.defaultCenter().addObserver(this, "printSelf", "MainActivity");

参数this是当前对象,printSelf是当前对象的一个方法名,这个方法叫做printSelf,MainActivity是这个消息的消息名。我们先看下这个方法的实现(注意参数是Map):

@TCThreadMode()
public void printSelf (Map<String, String> param) {

    Log.d("dddd", "Main2Activity printSelf 这个方法被调用了!");
}

2、然后,我们在别的类,或者当前类中,调用消息传递:

Map<String, Object> map = new HashMap<String, Object>();
map.put("1","2");
TCNotificationCenter.defaultCenter().postNotificationName("MainActivity", map);

通过在这里post消息,就会执行刚才的 printSelf 方法。

3、最后,我们还需要移除消息:

@Override
protected void onDestroy() {
    super.onDestroy();

    TCNotificationCenter.defaultCenter().removeObserver(this);
    Log.d("dddd", "Main2Activity onDestroy 这个方法被调用了!");
}

使用removeObserver可以移除所有的消息。

三、内部实现:

首先看这个注册:

public void addObserver(Object object, String methodName, String name)

含有3个参数:object、methodName、name。


在iOS中,消息转发的对象可以是任何对象。不过,这在Android中却不尽相同,由于Android内存的特殊性,只能在Activity或者Fregment中使用,所以在注册消息的时候,使用了:

if (!((object instanceof Fragment) || (object instanceof Activity))) {

    Log.d("dddd", "消息转发对象不是Activity或者Fragment,造成崩溃");
    Log.d("dddd", "addObserver: " + 1/0);
}

可以知道消息转发对象不是Activity或者Fragment,就会造成崩溃。


然后我们使用TCNotification这个对象来存储三个参数。

TCNotification notification = new TCNotification();
notification.setObject(object);
notification.setMethodName(methodName);
notification.setName(name);

将这个对象加入到对象列表中:

if (!notificationList.contains(notification)) {

    notificationList.add(notification);
}

至此就完成了对象的注册过程,其他实现就不具体展开了,有兴趣可以去Github看看。


总结:

不得不说EventBus具有强大的功能,但是我们平时几乎是很少用多少功能。如果你喜欢轻量级,并且是自己实现的类,那么你可以试试TCNotification

-------------------------------我是分割线-------------------------------

2018-11-05

相关文章

网友评论

      本文标题:Android消息转发中心(比EventBus更轻量)

      本文链接:https://www.haomeiwen.com/subject/tjnpuftx.html