Skip to content

Event Producer

贾俊辉 edited this page Jun 9, 2018 · 2 revisions

事件生产者,设计的目的是为了让外部事件引入,服务于视图。

框架内包含了一个网络状态事件生产者,您可以通过配置引入。

如果您视图内有电量的显示或者有弹幕的需求等,您可以考虑使用事件生产者来处理数据和事件分发。

网络状态事件生产者示例:

public class NetworkEventProducer extends BaseEventProducer {
    //...
    private Handler mHandler = new Handler(Looper.getMainLooper()){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case MSG_CODE_NETWORK_CHANGE:
                    int state = (int) msg.obj;
                    //...将网络状态发送出去
                    getSender().sendInt(InterKey.KEY_NETWORK_STATE, state);
                    PLog.d(TAG,"onNetworkChange : " + state);
                    break;
            }
        }
    };
    //...
    public NetworkEventProducer(Context context){
        //...
    }
    //...
    public static class NetChangeBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            //...
            //post state message
        }
        //...
    }
}

建议:

如果生产的事件属于标量或者标志请尽量使用key-value形式发送数据。

如果生产的事件属于频繁型的事件,请使用sendEvent(int eventCode, Bundle bundle, IReceiverGroup.OnReceiverFilter receiverFilter)方法发送,您可以过滤仅需要接收事件的视图以优化性能。