什么是Android组件化,为什么要组件化?_android组件化的作用-程序员宅基地

技术标签: 经验分享  架构  android-studio  android  移动开发  Android  

背景

组件化作为Android客户端技术的一个重要分支,近年来一直是业界积极探索和实践的方向。每个大厂内部的各个Android开发团队也在尝试和实践不同的组件化方案,并且在组件化通信框架上也有很多高质量的产出。本文主要介绍我们的组件化方案,希望对从事Android组件化开发的朋友能有所启发。

为什么要组件化

近年来,为什么这么多团队要进行组件化实践呢?组件化究竟能给我们的工程、代码带来什么好处?我们认为组件化能够带来两个最大的好处:

1.提高组件复用性

可能有些人会觉得,提高复用性很简单,直接把需要复用的代码做成Android Module,打包AAR并上传代码仓库,那么这部分功能就能被方便地引入和使用。但是我们觉得仅仅这样是不够的,上传仓库的AAR库是否方便被复用,需要组件化的规则来约束,这样才能提高复用的便捷性。

2.降低组件间的耦合

我们需要通过组件化的规则把代码拆分成不同的模块,模块要做到高内聚、低耦合。模块间也不能直接调用,这需要组件化通信框架的支持。降低了组件间的耦合性可以带来两点直接的好处:

1.代码更便于维护
2.降低了模块的Bug率

怎样实现组件化

要实现组件化需要考虑的问题主要包括下面几个:

  • 代码解耦。将一个庞大的工程拆分解耦,这是非常耗时耗力的工作,但这也是最基础最重要的一步
  • 数据传递。每个组件都有可能提供给其他组件使用,主项目与组件、组件与组件之间的数据传递
  • UI跳转。
  • 组件的生命周期。组件加载、卸载和降维的生命周期
  • 集成调试。在开发阶段如何做到按需的编译组件?一次调试中可能只有一两个组件参与集成,这样编译的时间就会大大降低,提高开发效率。
  • 代码隔离。如何杜绝耦合的产生。

下面给大家介绍的是全网最全的高级Android组件化强化实战手册,覆盖了整个互联网公司,受篇幅限制不会展示所有内容,只能截图展示部分,完整内容已整理成PDF文档。 如果有需要《高级Android组件化强化实战》手册可以私信回复我 666 即可

第一章 Android组件化初识

  • 组件化和模块化的区别
  • 组件化和插件化的区别
  • 组件化开发的优势
  • 业务逻辑层
  • 组件化开发要遇到的问题
  • 从组件化实战来解决问题
  • Android组件化基础
  • ……

第二章 Android组件化初探目录

组件化演示案例

  • 概述
  • 模块化和组件化
  • 组件化Demo
  • 组件application和library动态切换
  • ……

WanAndroid APP 组件化项目实战附demo

  • 版本更新
  • 效果图
  • 主要功能
  • 项目目录结构
  • 主要开源框架
  • ……

第三章 架构演化(大厂篇)

从智行 Android 项目看组件化架构实践

  • 组件化调整的原因和目标
  • 组件化架构调整的整体规划
  • 组件化架构调整中遇到的一些问题

得到 App

  • Android彻底组件化demo发布
  • JIMU使用指南
  • 组件化拆分的感悟
  • ……

微信 App

  • 微信Android模块化架构重构实践
  • 微信Android架构历史
  • 为何再次重构微信
  • ……

蘑菇街 App

  • 蘑菇街 App 的组件化实现方式
  • 组件生命周期管理
  • 壳工程
  • 遇到的问题
  • 持续集成
  • 周边设施
  • ……

爱奇艺 App

  • 基于Service的IPC通信
  • 组件化跨进程通信的核心诉求
  • Andromeda
  • 架构分析
  • ……

美团 App

  • 外卖客户端容器化架构的演进
  • 美团外卖容器化架构全景图
  • 外卖跨端容器建设
  • 外卖页面容器建设
  • 外卖容器化架构的衡量指标
  • 外卖容器化架构的监控运维
  • 外卖容器化架构的发布能力
  • ……

  • 美团Android组件化方案及组件消息总线modular-event实战
  • 美团Android消息总线的演进之路:用LiveDataBus替代RxBus、EventBus
  • WMRouter:美团外卖Android开源路由框架
  • 美团猫眼android模块化实战-可能是最详细的模块化实战

携程 App

  • 携程移动App架构优化之旅
  • ……

支付宝 App

  • Quinox 简介
  • Bundle 介绍
  • 资源管理
  • 容器化
  • ……

Atlas-手淘组件化框架

  • Atlas是什么
  • 组件化的诞生
  • 解耦和依赖
  • 性能的演进
  • ……

有赞微商城

  • 组件化改造概述
  • 实现方案
  • 实际应用案例
  • ……

总结

组件化后让代码结构非常清晰,分层结构以及之间的交互很明了,团队中的任何一个人都可以很轻松的绘制出代码结构图,这个在之前是没法做到的,并且每个组件的编译时间从 10 分钟降到了几十秒,工作效率有了很大地提升,最关键的还是解耦之后,每次开发需求的时候,面对的代码越来越少,不用背负那么重的代码包袱,可以说达到了“代码越写越少”的理想情况。

如果你是一位Android开发者学好组件化是非常有必要的,而深入理解组件化的实战更是重中之重。如果有需要《高级Android组件化强化实战》手册可以私信回复我 666 即可

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_61845324/article/details/125261986

智能推荐

图像线段检测几种方法_lines1, _, _, _ = lsd1.detect(gray_image1, 2, 2)-程序员宅基地

文章浏览阅读1.1k次。OpenCV-contrib有一个名为FastLineDetector的东西,如果它被用作LSD的替代品似乎很好。如果你有点感动,你会得到与LSD几乎相同的结果。当我将OpenCV提升到4.1.0时,LineSegmentDetector(LSD)消失了。_lines1, _, _, _ = lsd1.detect(gray_image1, 2, 2)

为什么人工智能用Python?-程序员宅基地

文章浏览阅读923次,点赞24次,收藏27次。Python 作为脚本语言,虽然上手简单、入门快,但是运行速度没有Java、C++快,应用也不够广泛,那Python到底有什么优势?来听听王道Python的主讲老师龙哥怎么说?Python被认为是一门相对容易学习和上手的编程语言,对初学者友好。其简洁的语法和清晰的代码结构使得开发人员能够更专注于解决问题而不是处理语法复杂性。这使得开发人员能够轻松地利用这些工具进行人工智能项目的开发。例如最流行的机器学习框架Scikit-learn只支持Python。

Python实例29:利用python自动创建多个Excel表格_python在excel表格内添加多张表-程序员宅基地

文章浏览阅读3k次,点赞4次,收藏19次。实例代码import xlwings as xwapp = xw.App(visible = True, add_book = False)for i in range(1, 21): workbook = app.books.add() workbook.save(f'e:\\example\\{i}班信息表.xlsx') workbook.close()app.quit()_python在excel表格内添加多张表

uni-app实现上拉加载,下拉刷新(下拉带动画)_uniapp 加载动画-程序员宅基地

文章浏览阅读5.7w次,点赞14次,收藏81次。直接代码展示了uni-app的上拉加载动画感觉还行,废话不多说了。。。1在pages.json添加允许下拉刷新{ "path":"pages/lookuser/lookuser", "style":{ "navigationBarTitleText":"用户日志", "enablePullDownRefresh": true//就是这个 }_uniapp 加载动画

常见服务器对jdk版本的支持_jdk 不支持国产服务器-程序员宅基地

文章浏览阅读2.6k次。WebSphere5.1:JDK1.4,Servelet2.3、JSP1.2WebSphere6.0:JDK1.4,Servelet2.4、JSP2.0WebSphere6.1:JDK5.0,Servelet2.4、JSP2.0Tomcat4.1:JDK1.4,Servelet2.3、JSP1.2Tomcat5.5:JDK5.0,Servelet2.4、JSP2.0_jdk 不支持国产服务器

mysql55dialect_关于数据库方言MySQLDialect、MySQL5Dialect、MySQL55Dialect、MySQL57Dialect、MySQL8Dialect之间的区别与联系...-程序员宅基地

文章浏览阅读657次。什么是Hibernate方言?Hibernate方言是用来告诉Hibernte如何对指定的数据库生成相应的SQL语句。尽管做了很多尝试去使SQL语句标准化,但是不同的数据库支持的SQL语句还是有很多不同的地方。所以Hibernate使用方言来辅助生成正确的SQL语句。①MySQLDialect②MySQL5Dialect③MySQL55Dialect④MySQL57Dialect⑤MySQL8Di..._mysql5dialect

随便推点

uni-app 配置编译环境与动态修改manifest,2024年最新android基础面试题及答案-程序员宅基地

文章浏览阅读208次。但是这时候又碰到了一个问题。不同的网络环境,可能还需要配置不同的小程序appid。作为一个慵懒的程序员,根据不同的网络环境,手动去修改appid那是不可能的。【注意】:复制上述代码的时候,记得把备注删除。通过以上,根据不同的编译方式,可以自动的切换不同的网络环境。重要事情说三遍(可视化创建的项目,在项目的根目录下)。二、动态修改manifest.json参数。动态配置appid,本质就是要动态配置。由以上可知,需要修改的是。1、创建如下项目结构配置。3、对应网络环境域名配置。

a33 linux 硬解码_全志A33-Linux软硬件定制-程序员宅基地

文章浏览阅读234次。佣金是参考 具体贵方评估说明:我司现有一款产品需求定制产品主板部分的硬件及系统,产品硬件PCB分两个部分:主板及电源板,电源板我司已经定型,现将主板及系统软件外包,由于我方产品外形已经定型,需求根据我方提供的外形尺寸及布局参考定制主板,时间周期尽量要快,1个月之内。交付硬件设计资料(原理图,PCB图等)软件源码资料(uBoot kernel Roofs等资料)以及符合要求的硬件主板5块。硬件需求:..._全志硬解码库例程

JSP及语法概要 (山无言) _jsp303 @digits-程序员宅基地

文章浏览阅读1.6k次。JSP及语法概要 (山无言) 有一点别搞混了~!到现在还有不明白的就是javascript与java编程语言是不一样的!  JavaServer Pages(JSP)使得我们能够分离页面的静态HTML和动态部分。HTML可以用任何通常使用的Web制作工具编写,编写方式也和原来的一样;动态部分的代码放入特殊标记之内,大部分以“<%”开始,以“%>”结束。例如,下面是一个JSP页面的片断_jsp303 @digits

中兴B860AV2.1U_非高安_晶晨S905LB处理器_8189无线_线刷固件包-程序员宅基地

文章浏览阅读1.8k次。2、电脑上安装好刷机工具Amlogic USB Burning Tool 软件 →打开软件 →文件 →导入烧录包 →把【擦除flash】和【擦除bootloader】两项勾选先默认去掉(如不识别或进度条不走再打勾刷机) →点击【开始】 →盒子接电源线 →电源关闭 →把USB线一端插上盒子 →保持短接 →USB另一端插上电脑 →通电开机。_b860av2.1u

[爱分享]深度理解i++ **** ++i的底层原理。_i++*++i-程序员宅基地

文章浏览阅读3.4k次。**一,首先理解i++ ,++i**i++与++i都是Java中的算数运算符,表示自增(操作数的值增加1)i++:先进行表达式运算(例如:赋值),再自增++i:先自增,再进行表达式运算(例如:赋值)i++ 先赋值在运算,例如 a=i++,先赋值a=i,后运算i=i+1,所以结果是a==1++i 先运算在赋值,例如 a=++i,先运算i=i+1,后赋值a=i,所以结果是a==2..._i++*++i

windows任务计划程序运行python脚本失败的原因_任务计划程序无法启动python.exe-程序员宅基地

文章浏览阅读5.6k次,点赞14次,收藏9次。windows任务计划程序运行python脚本直接闪退?运行结果显示(0x1)?引发了FileNotFoundError异常?_任务计划程序无法启动python.exe

推荐文章

热门文章

相关标签