组件化技巧——跨进程共享View

本文介绍了字节跳动在组件化开发中解决跨模块View共享的问题。通过使用占位符View和自定义属性,结合布局解析工厂,实现了在XML中预览并动态加载其他模块的View。关键在于利用LayoutInflater的Factory2进行定制,将自定义解析逻辑注入到布局加载过程中。
摘要由CSDN通过智能技术生成

前言

在字节学到一招。
刚来字节,发现字节内部的技术真的很牛逼,一后会不定期更新博客,记录一下自己在头条这边的学习历程。

跨模块View通信

我们都知道,当某块A想使用模块B里面的View时,有两种方式

  1. 抽象出接口,通过依赖接口IView和管理类ServerManager,动态添加view,缺点是只能动态添加,不能在xml里面直接使用,也无法预览。(注意,这里的IView和ServerManager需要统一在common模块)
  2. 把模块B里面的View直接下沉到更底层去。
    前面这两个是最通用的方法,一般第二种方法居多,但是当模块很多,并且只有两个模块需要这个view时,下沉就显得很没必要了。
    下面说说字节的方法。
    字节是采用了占位符的方式,提供了一个PlacePositionView来代替view,提供两个自定义属性,一个是公有的CommonServer属性,用来生成view,还有一个时view的名字name,当模块A传入name与CommonServer中的string对应上时,就返回view。可能这里还是有疑问,也就是最大的疑问:那就是怎么解析这个View?这个View不是动态生成的,而是放在xml里面的,既然如此,如何让我们的View能够在xml里面被识别呢?
    说到这里,我们可以想一想xml是由什么来解析的?没错,就是由layoutInflater.inflate()来解析的,那么,我们是否能够在layoutInflater里面做些手脚,来实现这一流程呢?其实时可以的,给出hongyang的参考链接Android “退一步”的布局加载优化,读过这篇文章,我相信你一定有印象,我们的layoutFlater有三个Factory,分别是Factory,Factory2以及mPrivateFactory,只有这三个factory都解析失败,才会走反射那一套,那么,我们使用哪一个呢?让我们来看看那一段源代码。
    @Unsup
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值