android组件化方案对比

 

现在公司准备项目组件化,前公司项目其实用了组件化,但功能比较少,比较好拆,现在公司项目比较庞大,功能繁杂,参与人员多,感觉非常不大好拆,拆的时候还涉及到功能、代码重构。老大对技术比较看重,还要求大家在重构项目前看完三本书(重构、Effective Java、23种设计模式),这三本书确实也不错的。

近期一直在研究项目组件化,看了业界不少组件化方案,这是下面对组件化方案的一些对比,后面还会不断完善,争取探索出一套适合自己项目的组件化方案。

                   组件化方案
功能 
Component CallerArouterWMRouterModularizationArchitecture
调用Activity、Fragment支持组件与Activity、Fragment的生命周期关联编译期通过apt生成path和activity.class映射关系的类文件,在app进程启动时加载这些类文件,保存映射关系到内存中,再直接获取。支持多schemem、host、path,支持URI正则匹配支持,组件生命周期与应用的Application相关联
组件间方法调用基于总线方式转发调用请求,组件总线只负责通信,即转发调用请求和返回执行结果,不需要下沉接口,面向通信协议编程,支持任意指令的调用/回调,可以跨进程调用转发给其他app基于路由方式,将接口类下沉到base层,面向接口编程,依赖倒置原则
需要通信组件打包到同一个app内部才能获取到
API设计思想,支持获取接口所有实现,获取Class或实例,支持无参构造或自下义Factory/Provider构造支持
是否支持跨进程组件调用(组件开发/调试时单独作为app运行)采用BroadcastReceiver+Service+LocalSocket方式
每个app都能给其他app调用
app可设置是否对外提供跨进程组件调用支持
组件调用请求发出去之后,能自动探测当前设备上是否有支持此次调用的app
支持超时、取消
跨进程调用数据传递,同下一个app支持非基本数据类型对象,跨app只支持基本数据类型
URLScheme方式
基因中自带支持从webview中调用,不用互相注册;
缺点:只能单向给组件发送信息,适用于启动Activity和发送指令,不适用于获取数据;
需 有额外的中转Activity统一处理URLScheme,再进行转发
根据URI不同的Scheme、host、path进行不同处理,分成native页面、h5、外部app呼起、通知中心push等,自己也可以添加UriInterceptor进行拉截,做跳转前处理等AIDL方式,可传递Parcelable类型的对象
缺点:调用组件前需提前知道组件在哪具进程,否则无法建立ServiceConnection.
组件在作为独立app和作为lib打包到主app时,进行名称不同,维护成本高
app间调用的开关及权限设置满足不同级别的安全需求无法进行权限设置、开关设置,任意app都可调用支持设置host权限跳转支持设置跨app调用开关
同步/异步调用组件支持,同步调用采用Callbale.call()获取结果;
异步:放入线程池中运行,执行无后调用IComponentCallback.onResult(cc, result)
不支持支持支持
同步/异步实现组件支持,对于同步调用异步实现的组件,用Oject的wait-notify机制,当线件需要异步返回结果,在CC框架内部进行阻塞不支持不支持支持
添加自定义拦截器 支持支持支持配置全局和局部拦截器 
超时设置支持不支持不支持不支持
手动取消支持不支持不支持不支持
动态注册/反注册组件编译时自动注册组件,无需手动维护组件注册表(ASM修改字节码方式)每个module都生成自己的java类,这些类的包名都在特定包下,运行时读取dex文件中该包下所有类,通过反射完成映射表的注册java动态注册或注解配置自动注册支持
crash、null等错误处理组件调用处、回调处、组件实现处的crash全部在框架内catch住;可根据CCResult结果进行降级处理支持降级处理,失败回调支持降级处理,失败回调支持
组件生命周期管理组件与调用方 Activity、Fragment生命周期关联不支持不支持每个组件都实现一个类似Application的生命周期管理类,并与应用的Application进行绑定,实现组的生命周期与应用生命周期绑定 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值