android LocalbroadcastReceiver学习

  1. LocalBroadcastManager 原理

LocalBroadcastManager思想是本地维护一个单例,然后在单例里进行
register,send,unregister

首先是register,根据action,把receiver,intentfilter存入hashmap,这样 就在本地存了自己的receiver,intentfilter,action 等各种信息(其实就是这三个),hash只能是key,value,所以就包装成了对象进行保存,

        synchronized (mReceivers) {
            ReceiverRecord entry = new ReceiverRecord(filter, receiver);
            ArrayList filters = mReceivers.get(receiver);
            if (filters == null) {
                filters = new ArrayList(1);
                mReceivers.put(receiver, filters);
            }
            filters.add(filter);
            for (int i=0; i entries = mActions.get(action);
                if (entries == null) {
                    entries = new ArrayList(1);
                    mActions.put(action, entries);
                }
                entries.add(entry);
            }
        }
    }
感觉android 这块写的太好了,(首先要知道 一个receiver有一个intentfilter,但是可以有多个action)
先是去创建一个ReceiverRecord对象,然后去根据receiver的hashmap中去找这个filter,看这个list是否为空,如果没有证明没有添加过这个receiver,那么把他添加上,添加完毕了,记得把这个filter添加到list中,这样就避免了重复创建对象,重复添加。(思想就是先判断添加,然后add)

其实就是先去获取这个value,看他是否有value,有添加过了,直接add,没有 就新建,然后在add
至此 就完成了register

2.然后是send
android send的作用就是把这个intent发送到receiver中,所以要做的就是根据这个action,然后找到对应的receiver,同时intentfilter要匹配,这样就可以send成功了

总结

register 的时候 把action作为key进行保存broadcast和intentfilter,然后send 的时候 根据action进行遍历,在传递给broadcastreceiver的receiver方法

你可能感兴趣的:(android LocalbroadcastReceiver学习)