滴滴Chameleon 全局事件 EventBus

Android:

@CmlModule(alias = "event")
public class EventModule {

    private Map<String, Map<String, CmlCallback<JSONObject>>> callbackMap = new HashMap<>();

    @CmlMethod(alias = "on")
    public void on(ICmlInstance instance,
                   @CmlParam(name = "key") String key,
                   @CmlParam(name = "id") String id,
                   CmlCallback<JSONObject> callback) {
        Map<String, CmlCallback<JSONObject>> map = callbackMap.get(key);
        if (null == map) {
            map = new HashMap<>();
            callbackMap.put(key, map);
        }
        map.put(id, callback);
    }

    @CmlMethod(alias = "off")
    public void off(ICmlInstance instance,
                    @CmlParam(name = "key") String key,
                    @CmlParam(name = "id") String id) {
        Map<String, CmlCallback<JSONObject>> map = callbackMap.get(key);
        if (null == map) {
            return;
        }
        map.remove(id);
    }

    @CmlMethod(alias = "commit")
    public void commit(ICmlInstance instance,
                       @CmlParam(name = "key") String key,
                       @CmlParam(name = "data") JSONObject data) {
        Map<String, CmlCallback<JSONObject>> map = callbackMap.get(key);
        if (null == map) {
            return;
        }
        for (CmlCallback<JSONObject> callback : map.values()) {
            try {
                callback.onCallback(data);
            } catch (Exception e) {
                Log.d(EventModule.class.getSimpleName(), e.getMessage(), e);
            }
        }
    }
}

JS

    mounted() {
        bridge.callNative(
            'event', // 模块名
            'on', // 方法名
            {
                key: "test", // 事件名
                id: "test1" // 监听id 取消监听时有用
            },
            res => {
                cml.showToast({
                    message: 'App Event: ' + res.data.msg,
                    duration: 1000,
                });
            }
        );
    }
    destroyed() {
        bridge.callNative(
            'event', // 模块名
            'off', // 方法名
            {
                key: "test", // 事件名
                id: "test1" // 监听id
            }
        );
    }
    methods = {
        event() {
            bridge.callNative(
                'event', // 模块名
                'commit', // 方法名
                {
                    key: "test", // 事件名
                    data: {
                        msg: "test"
                    }
                }
            );
        },
    }

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值