美文网首页
android LocalbroadcastReceiver学习

android LocalbroadcastReceiver学习

作者: bogerLiu | 来源:发表于2017-07-11 14:21 被阅读81次
    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<IntentFilter> filters = mReceivers.get(receiver);
                if (filters == null) {
                    filters = new ArrayList<IntentFilter>(1);
                    mReceivers.put(receiver, filters);
                }
                filters.add(filter);
                for (int i=0; i<filter.countActions(); i++) {
                    String action = filter.getAction(i);
                    ArrayList<ReceiverRecord> entries = mActions.get(action);
                    if (entries == null) {
                        entries = new ArrayList<ReceiverRecord>(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学习

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