组件:指单一的功能组件,如视频组件(VideoSDK)、支付组件(PaySDK)、路由组件(Router),每个组件都能单独抽出来制作成SDK,也有的公司内部叫Lib组件
模块:指的是独立的业务模块,如直播模块(LiveModule)、首页模块(HomeModule)、即时通信模块(IMModule)等。模块相对于组件来说粒度更大,模块可能包含多种不同的组件。有的公司内部也叫UI组件
组件化的好处:
-
避免重复造轮子,节省开发和维护成本
-
通过组件和模块为业务基准合理安排人力,提高开发效率
-
不同的项目可以共用一个组件或者模块,确保整体技术方案的统一性
-
为未来插件化共用一套底层模型做准备
模块化的好处
-
业务模块解耦,业务一直更加简单
-
多团队或者团队内多人根据业务内容进行并行开发和测试
-
单个业务可以单独编译和打包,加快编译速度
-
多个APP共用模块,降低了研发和维护成本(eg:同程旅行,同程旅行极速版)
组件化是功能导向的,模块化是业务导向的
总结一句话:组件化是为了重用而拆分模块,模块化是为了业务分离而拆分模块
shareUid,拥有同一个uer id的多个APP可以配置成运行在同一个进程中,所以默认可以互相访问任意数据,比如prefs,且只有在主module里面声明shareUserId,才会最终打包到full文件夹西面的AndroidManifest中!
Application比Acitivity更先创建,重写refisterActicityLifeCycleCallbacks方法可以拿到栈顶的Activity,而且是全局的。
组件间通信方式
-
LocalBroadcast(APP内部通信)
-
EventBus(订阅者、发布者、订阅时间、事件总线)Publisher post(Event),Subscriber onEvent,EventBus3.0+用编译时注解替代了2.x的运行时注解,速度快效率高
-
RxBus是一种响应式编程的模式,而非EventBus的观察者、监听者设计模式
组件间跳转
-
隐式启动Activity,通过sendintent.resolveActivity(getPackageManager!=null安全的跳转,设置exported=false确保其他APP无法跳转到我们的APP中
-
Router
ARouter:
通过加载编译时注解创建的Group、Providers、Root三个类型的文件,使用WareHouse将文件保存到三个不同的HashMap对象中,而这个WareHouse就相当于路由表。
加载过程:
-
通过ARouter.navigation封装postcard对象
-
tongguo 索引传递到路由中转站,询问是否存在跳转的对象
-
如果存在则设置绿色通道开关
-
判断是否绿色同行和是否能通过拦截服务
-
全部通过就会调用startActivity()
路由最大的好处:
组件间跳转
拦截过滤,登录状态验证等
具体的路由拦截:
路由跳转到需要申请权限的组件或者Activity,则可以实现IInterceptor接口,并重写process