android消息页怎么做的,Weex页面间的消息机制(Android端实现)

本文介绍了如何在Weex应用中解决跨页面通信问题,通过使用Native的LocalBroadcast机制和Module模块,实现页面间消息的高效传递。重点讲述了Module在Activity生命周期管理中的应用,以及如何在onActivityCreate和onActivityDestroy中进行本地广播操作,以实现稳定的消息路由。
摘要由CSDN通过智能技术生成

在同一个Weex页面中,我们可以使用globalEvent来做消息转发,但是如果涉及到了跨页面的通信,则只使用Weex端技术比较难实现(通过全局变量算一种实现)。因此我们需要通过从native层中转一次消息来辅助实现。在Android里已经有很多成熟的全局通知机制,如经典的EventBus以及原生的LocalBroadcast。考虑到尽量减少对第三方库的依赖,我们采用了LocalBroadcast的形式。

Weex的native扩展方式之一——Module,是这个消息机制的核心组成部分,每个页面都有一个自己的Module实例,因此我们可以新建一个Module来处理发送以及接受Event的逻辑。

在Module中也提供了对于Activity的生命周期的hook,所以我们可以很方便的在Module中处理本地广播的注册、注销等逻辑。

在这里碰到了一个坑,Module对于Activity生命周期的hook,需要手动调用在Activity里创建的WXSDKInstance的生命周期回调方法。如想要hook生命周期中的onCreate,则需要调用如下代码:

if (mInstance != null) {

mInstance.onActivityCreate();

}

然后在WXSDKInstance的onActivityCreate中会去调用Module的onActivityCreate:

@Override

public void onActivityCreate() {

// module listen Activity onActivityCreate

WXModuleManager.onActivityCreate(getInstanceId());

...

}

public static void onActivityCreate(String instanceId){

Map modules = sInstanceModuleMap.get(instanceId);

if(modules!=null) {

for (String key : modules.keySet()) {

WXModule module = modules.get(key);

if (module != null) {

module.onActivityCreate();

} else {

WXLogUtils.w("onActivityCreate can not find the " + key + " module");

}

}

}

}

这里有一个坑,就是在Activity的onCreate里如果直接调用WXSDKInstance的onCreate,则这时候Module还未被注册到WXSDKInstance中,因此这时候不会触发Module的onActivityCreate,目前我的做法是将WXSDKInstance的onCreate调用放到onRenderSuccess中。具体原因还有待确认。

然后在Module的onActivityCreate中我们可以做本地广播的注册操作,在onActivityDestroy中做注销操作。

具体的消息首发逻辑可以参考以下时序图:

774b77ddde52

Weex页面间消息传递时序图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值