美文网首页Android开发经验谈Android开发Android技术知识
Android 组件化架构之路——不可缺失

Android 组件化架构之路——不可缺失

作者: 程序老秃子 | 来源:发表于2022-04-13 16:15 被阅读0次

前言

image.png

首先我们对组件化要有一个基础的了解,在我们日常进行项目开发中,经常会对项目进行封装处理,就比如一些功能模块,基础库,但是随着时代的发展,业务模块因为长时间的相互调用就会形成高耦合现象,也就是说会变成一团乱麻,这样就使得扩展和维护的难度变高

就是在这种现象下,逐渐有人提出组件化,模块化,等一系列的专业名词

组件化:具有单一功能,功能导向的作用

模块化:具有独立业务,业务导向的作用

提出这些专业方向的名词其本质上都是为了其代码重用和解耦

组件化架构改造

image.png

要想实现组件化架构改造一般而言就是从一个单体项目进行入手,我们可以从以下几个方面入手

代码解耦:如何将一个庞大的工程分成有机的整体?

组件单独运行:因为每个组件都是高度内聚的,是一个完整的整体,如何让其单独运行和调试?

组件间通信:由于每个组件具体实现细节都互相不了解,并且每个组件都需要给其他调用方提供服务,那么主项目与组件、组件与组件之间如何通信 就变成关键?

UI 跳转:UI 跳转指的是特殊的数据传递,跟组件间通信区别有什么不同?

组件生命周期:这里的生命周期指的是组件在应用中存在的时间,组件是否可以做到按需、动态使用、因此就会涉及到组件加载、卸载等管理问题。

集成调试:在开发阶段如何做到按需编译组件?一次调试中可能有一两个 组件参与集成,这样编译时间就会大大降低,提高开发效率。

代码隔离:组件之间的交互如果还是直接引用的话,那么组件之间根本没 有做到解耦,如何从根本上避免组件之间的直接引用,也就是如何从根本 上杜绝耦合的产生?

依赖

image.png

组件化之间想要产生关系相互之间就要有依赖关系,有着这层关系才能能进行传递信息,接下来让我们来了解下Android Studio 所支持的几种依赖方式

library dependency:仓库对依赖进行索引,将其分为网络库和本地库

jar dependency:在lib文件中的aar文件和jar文件

module dependency:由于Android Studio的依赖关系,实际上也是将其打包成aar文件

这三种依赖方式都可以从项目中的gradle文件进行配置

多个库对一个模块或者库进行依赖,虽然使用的通信成本低,效率高,但是要想将其替换掉就会非常麻烦,这个时候就需要进行解耦,,就此为根据繁衍出了组件化架构

总而言之就是通过依赖聚合,然后通过组件化解耦

AndroidManifest清单文件

由于每个module都拥有,最终都会将其打包合成为一个

shareUid虽然只有application module中所声明的有效,但是相对的,相同user id的app可以进行配置成为运行在同一进程,相互之间访问任意数据;

下面使用代码举例自定义Application 使用主module为优先选择,如若没有则需要使用后编译的module

<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n35" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">
package com.ljy.publicdemo

import android.app.Application
import android.content.res.Configuration

/**
 * @Author:         LiuJinYang
 * @CreateDate:     2020/8/19
 *
 * Application的主要方法:
 */
class TestApplication : Application() {

 /**
 * 应用创建时回调
 */
 override fun onCreate() {
 super.onCreate()
 }

 /**
 * 应用终止时回调,不保证一定调用(如被系统回收时)
 */
 override fun onTerminate() {
 super.onTerminate()
 }

 /**
 * 内存不足时调用,在此方法中释放一些不必要的资源
 */
 override fun onLowMemory() {
 super.onLowMemory()
 }

 /**
 * 配置改变时触发,如屏幕旋转
 */
 override fun onConfigurationChanged(newConfig: Configuration?) {
 super.onConfigurationChanged(newConfig)
 }

 /**
 * 注册对app内所有activity生命周期的监听,如获取栈顶activity对象,全局弹框;
 */
 override fun registerActivityLifecycleCallbacks(callback: ActivityLifecycleCallbacks?) {
 super.registerActivityLifecycleCallbacks(callback)
 }
}</pre>

结语

通过本文中相信大家也明白了掌握组件化的原理对我们之后的开发工作是十分重要的

那我们要如何对组件化进行学习呢?

我通过平时的项目开发工作和闲暇时候进行收集和整理与组件化相关的资料,从项目开发到代码实现原理都有着详细的文档说明,相信可以帮助大家尽快的掌握其中的原理

组件化这一块因为篇幅有限所以只在文中单独整理出来一部分对其讲解

大家如果对组件化感兴趣的话或者更多关于Android组件化的问题

可以在评论区留言或者私信与我交流

image.png

相关文章

网友评论

    本文标题:Android 组件化架构之路——不可缺失

    本文链接:https://www.haomeiwen.com/subject/pvyasrtx.html