Android 架构 - 概览

Android项目结构讲解【超详细】 本文主要讲解Android的Project查看模式和Android查看模式下的项目结构与Gradle的相关配置 阅读详情

一、概念

目的解耦、复用、可读性、健壮性、提高并行开发效率。
架构划分原则纵向划分模块、横向划分层级、解耦通信。

二、项目架构(模块划分)

1.1 单工程模式(小型应用)

通常我们写项目会进行分包处理,根据界面或功能的不同将代码文件存放在对应的包中,这对于小型APP来说开发非常便捷方便。随着后期业务复杂增多,一个大型项目的代码量是及其庞大的,这会带来一系列的问题。

  • 可读性下降:各种业务代码混杂在一个模块内,失去层次感。
  • 维护成本上升:开发人员需要了解各个业务避免改动影响其它业务,定位问题需要在多个业务代码中寻找和跳转。
  • 开发效率低:修改了一个小功能却需要重新 Build 整个项目才能看到结果,耗费时间。
  • 不利于多人协同开发:一个业务的bug可能阻断其它业务的开发调试,开发风格不同难以分割相互影响,版本管理中容易出现冲突和代码覆盖问题,相互之间有沟通成本。
  • 耦合高复用性差:分包约束性太差容易相互调用,业务难以抽离被新项目复用,后期更改起来麻烦。
模块化随着 AndroidStudio 工具的推出,支持多个 module 开发提出了模块化的概念。将一个复杂的项目按照业务拆分为多个模块进行独立管理,例如【首页】【消息】【直播间】。
组件化
插件化

1.2 模块化(业务解耦)

        随着 AndroidStudio 工具的推出,支持多个 module 开发提出了模块化的概念。

        将一个复杂的项目按照业务拆分为多个模块进行独立管理,例如小红书的【首页 module_Home】【购物 module_shop】【消息 module_msg】【我 module_me】,通常还有一个基础模块【公共 module_common】 提供 BaseActivity、图片加载、网络请求等功能。

        在各个业务功能比较独立的情况下是比较合理的,但多个模块中肯定会有页面跳转、数据传递、方法调用等情况,所以必然存在复杂的依赖关系,即模块间有着高耦合度。 高耦合度加上代码量大,就极易出现问题。

  • 模块多,编译一次太久。
  • 改了一行代码或是调了一点UI,就要编译整个项目。
  • 合代码经常发生冲突。
  • 被人改了自己模块的代码,或是做一个需求发现还要去改动很多别人模块的代码。
  • 别的模块已经有类似功能,自己要用只能复制一份再改。
  • 代码职责不明确,这个不是我负责的我不管。
  • 只做了一个模块的功能,但改动点很多需要完整回归测试。
  • 做了需求,但导致别的模块出现bug。

 1.3 组件化(功能重用)

        组件化是基于可重用的目的,将应用按功能拆分成多个独立的组件,提升复用减少耦合。对单个功能进行开发,多个功能组件起来就是一个业务组件,多个业务组件组合起来就是一个应用。

        在打包时(集成模式)是一个引用库(Library)集成到项目中,在调试时(组件模式)是一个应用(Application)能单独编译运行,但还是依附于整个项目中。

模块化组件化
将应用按业务拆分将应用按功能拆分

1.4 插件化(频繁更新) 

组件化插件化
单位moduleapk
独立性在打包时是一个引用库(Library)集成到项目中,在调试时是一个应用(Application)能单独编译运行,但还是依附于整个项目中。一个插件就是一个独立完整的APP,可以整合进更大的应用中,可以动态下载更新(动态加载、热更新、热修复)。
通信方式根据一套统一的注册路由系统来统一实现跨组件通信。不同插件是不同的进程。

三、代码分层(层级划分)

参考文章:移动架构这么多,如何一次搞定所有

M层(Model 数据层)负责数据的存取计算。
V层(View 视图层)负责UI的显示更新。
X层(C、P、VM、I 逻辑层)负责业务逻辑,区别在于通信方式。

3.1 无分层

业务代码全写在 UI 中造成臃肿,耦合度高,难以单元测试,而 Activity/Fragment 又有生命周期问题,配置变更会销毁重建导致数据丢失。

3.2 MVC(Model-View-Controller)

解耦技术分层。
解决了无分层中的什么将业务逻辑从 UI 中抽离出来,C负责业务,M负责数据。
通信方式网上有很多版本写法,也说明前期无规范很乱。

3.3 MVP(Model-View-Presenter)

解耦技术接口隔离(多态)。
解决了MVC中的什么不再是直接使用对方实例(强耦合),而是将对方实例时向上转型成接口类型,调用接口里的方法。
通信方式V中创建P和M实例,通过构造把V和M传给P(V有生命周期问题,P持有V和M,注意释放P和M避免内存泄漏),V持有P调用业务逻辑,P持有M获取数据,P持有V更新界面。

3.4 MVVM(Model-View-ViewModel)

不考虑不被推荐使用的 DataBinding,V和VM双向绑定,一方变更会自动触发另一发更新,不便于追踪测试,且xml中写逻辑降低可读性。

解耦技术ViewModel、DataBinding、ViewBinding、LiveData。
解决了MVP中的什么VM具有生命周期感知,解决繁琐的UI重建导致的数据持久化问题和资源释放。LiveData基于观察者模式,解耦P持有V手动处理界面更新时机,变为V自己管理订阅取消来单项通信(响应式),由此消除了接口泛滥(大量回调模板代码)。
通信方式V调用VM中的方法,VM处理完业务会更新状态,状态的变化会使订阅者V自动更新UI。VM持有M获取数据。

3.5 MVI(Model-View-Intent)

解耦技术唯一可信数据源、事件驱动、密封接口、数据类。
解决了MVVM中的什么Compose向外发送用户事件属于副作用,受重组影响需要在协程中完成,V只能发送已定义好的事件通知VM处理(不再是随便调用VM中的业务方法直接更新状态,事件隔离实现状态可控),通过Channel保证并发安全。VM中有很多 LiveData 且相互之间可能存在逻辑关联,改为将这些分散的状态以属性的形式整合进同一个数据类中,创建实例通过 mutableStateof() 包裹成为状态,VM处理完业务会更新该状态(通过 copy() 更新对应属性),状态的变化会自动更新V(实例变了会被观察到,可组合项读取的那个属性如果没变的话会跳过重组)。
通信方式V发送事件,VM处理完业务会更新状态,状态的变化会使订阅者V自动更新UI。VM持有M获取数据。
Android图形显示架构概览 图形流生产者一般指的是各个应用,应用通过不同的方式生产出要显示的图形流。对于图形显示而言,消费过程是将各个应用生产的图形数据进行汇总,根据窗口管理提供的窗口元数据将多个图形数据合成到帧缓冲(硬件抽象层封装了与底层驱动交互的细节,对外提供简单的接口,有了硬件抽象层,图形消费者只需调用相关的接口即可与底层驱动进行交互,无须关心具体的交互细节。在硬件抽象层有两个与图形显示系统相关的组件,分别是Gralloc和Hardware Composer,前者负责图形缓冲的分配,后者负责将图形缓冲的内容传递到底层驱动显示。 阅读详情

相关推荐

【项目实战】Android应用程序架构,MVC、MVP、MVVM三种模式介绍

MVC(Model-View-Controller)模式MVP(Model-View-Presenter)模式MVVM(Model-View-ViewModel)模式。

奶爸的编程之路,也就一周冷个三天 1094

Android 项目架构

在维基百科里是这样定义的:软件架构是一个系统的轮廓 . 软件架构描述的对象是直接构成系统的抽象组件. 各个组件之间的连接则明确和相对细致地描述组件之间的通讯 . 在实现阶段, 这些抽象组件被细化为实际组件 , 比如具体某个类或者对象 .面试的过程中会问到如何设计架构?应用从哪几方面进行考虑?架构的职责是什么?你会发现这样的问题并不好回答 . 这里可以通过如下三点回答 :● 为了解决特定的问题而提出 .●有特定的原则将系统整体进行角色划分 .● 约定角色间的沟通机制有分层、有联系才能形成框架;

我很好 781

Android项目基础架构。包含架构分层、基本工具层等

采用二次封装后的okhttp3+Gson.(没有使用retrofit,考虑到服务端提供的API可能不会很标准) 基本功能: POST请求 GET请求 上传文件&进度监听 下载文件&进度监听 返回可以选择Gson格式 取消某个context的所有网络请求 并且将该功能模块独立为MyOkhttp,可以重复使用.

Android系统架构

Android系统架构 Android系统架构分为五层,从下到上依次是应用层、应用框架层、系统运行库层、硬件抽象层和Linux内核层。 应用层(System Apps) 系统内置的应用程序以及非系统级别的应用程序都属于应用层,负责与用户进行直接交互,通常都是用Java进行开发的。 应用框架层(Java API Framework) **应用框架层是为开发人员提供了开发应用程序所需要的API,**我们平时开发应用程序都是调用着一层所提供的API,当然也包括系统应用。这一层是由Java代码编写的,可以称为Ja

xingyu19911016的博客 1万+

CAD文件转换避坑指南:Inventor导出STP时这些设置千万别忽略

本文深入解析了使用Autodesk Inventor导出STP文件时的关键设置与避坑指南。重点探讨了应用协议选择、样条曲线拟合精度对几何保真度的影响,以及装配体结构和元数据的保全策略,旨在帮助用户实现高质量、零误差的CAD数据交付,避免下游软件打开时出现特征丢失或曲面破碎等问题。

weixin_29214559的博客 518

MOLDFLOW 2012模流分析基础到实战视频教程

├ 1第一讲MF软件安装与界面定制及模流前期准备工作及分析流程介绍 ├ 2第二讲MF建模工具条命令讲解与图层的运用 ├ 3第三讲MF网格类型与适应范围及网格划分、诊断、修复与统计 ├ 4第四讲MF中CAD doctor 模块对导入模型的修复方法与实例 ├ 5第五讲MF中常见各种流道浇口及水路的建模方法与外部导入方法上 ├ 6第六讲MF产品模型导入CAD DOCTOR与修复 ├ 7第七讲MF分析序列设定与网格的划分与诊断及修复 ├ 8第八讲MF材料选择与成型工艺参数设定 ├ 9第九讲MF创建浇注系统:主流道、

QQ_1987083845的博客 2545

[Android] 架构概览

架构概览 | Android 开源项目 | Android Open Source Project

ykun089的博客 123

银行会计第2课:交易和核算分离的思想

核算作为会计的基础,将交易转化为可量化的信息,而会计则通过整合核算结果,实现对经济活动的全面把控。- 本质:指企业或主体之间发生的、能引起经济利益变动的具体事项,比如采购商品、销售货物、支付工资等,是客观发生的经济事实。可售产品(业务视角的核算对象) + 属性条件(核算的分类,限制等) = 核算类型(会计视角,含有科目分类内容)- 核算:会计人员根据采购发票、入库单等,将这笔交易记为“借:原材料,贷:银行存款”(对事实的会计处理)。- 特点:是核算的源头,不涉及会计处理,仅代表经济行为的发生。

ademen的博客 499

安卓相机架构概览

camera

weixin_42581177的博客 806

全新YOLO26有效涨点改进专栏目录 | 本专栏持续更新500+篇内容 | 包含各种卷积、主干网络、各种注意力机制、检测头、损失函数、小目标检测改进、二次创新模块、独家创新等几百种创新点改进

🔥《2026年YOLO26改进专栏》🔥 🚀持续更新500+最前沿创新改进点(顶会顶刊论文/独家创新策略),涵盖主干网络、各种卷积、注意力机制、检测头等模块,助力科研论文发表与模型性能提升,支持检测/分割/分类任务。订阅即获完整可运行项目,提供专业QQ答疑群,适合科研发论文(SCI/CCF/核心)及工业应用(PCB/医学/遥感检测)。专栏价格将逐步上涨,早订更优惠! ⭐特色:非计算机专业友好、模块可自由组合、全网独家创新;📌适用:研究生大论文和小论文创新、小目标检测、多领域科研应用,满足不同研究需求。

Ai缝合怪、助力小伙伴高效发论文 5139

★教程1:matlab学习教程入门100例目录

★基础入门 1.为什么要学习MATLAB 2.MATLAB安装 持续更新....... ★MATLAB基础编程语言熟悉

FPGA/MATLAB学习教程/源码/项目合作开发 4万+

Android (AOSP) 架构概览

Android 开放系统平台 (AOSP) 是公开发布且可修改的 Android 源代码。任何人都可以下载并修改其设备的 AOSP。AOSP 提供 Android 移动平台的完整且功能完备的实现。:AOSP 无法为需要后端服务的应用(例如云消息传递或高级位置信息服务应用)提供支持。此外,AOSP 并没有包含特定类型的设备可能需要的一整套最终用户应用。实现 AOSP 的设备有两种兼容性级别:AOSP 兼容性和 Android 兼容性。AOSP 兼容的设备必须符合中的要求列表。

华南烹鱼宴 1730

华为od 面试八股文_Python_05_含答案

华为od 面试八股文_Python_05_含答案

MISAYAONE的博客 2564

Android Camera五层架构

Android Camera五层架构

qq_50442216的博客 452

【cmd】Win10家庭版找不到 gpedit.msc (组策略)的解决方法

目录 一、创建cmd文件 二、以“管理员身份”运行“gpedit.cmd”文件 三、运行“gpedit.msc”命令查看组策略 一、创建cmd文件 (1)新建一个文件名为“gpedit.txt”的txt文本文档: (2)文本中写入以下内容: @echo off pushd "%~dp0" dir /b C:\Windows\servicing\Packages\Micros...

顾三殇 —— 博客空间(软件测试) 4万+

YOLOv8改进策略【损失函数篇】| 替换Powerful-IoU(PIoU),增强对中等质量锚框的关注力,引导锚框更直接、高效地回归

现有基于IoU的损失函数存在不合理的惩罚因子,导致锚框在回归过程中出现面积扩大的问题,使得回归效率降低、收敛速度变慢。同时,这些损失函数在反映锚框与目标框之间的差异、考虑目标框大小以及某些情况下的性能表现等方面存在局限性。在目标检测任务中,边界框回归的损失函数对检测性能至关重要。Powerful-IoU(PIoU)及其升级版PIoU v2正是为解决现有损失函数存在的问题而设计的。本文利用PIoU改进YOLOv8的损失函数,提高模型精度。

Limiiiing的博客 673

linux安卓运行环境,Android App的运行环境及Android系统架构概览

Android基于linux内核,面向移动终端的操作系统。主要包括以下几个方面:Application Framework:这一层为应用开发者提供了丰富的应用编程接口,如 Activity Manager,Content Provider,Notification Manager,以及各种窗口 Widget 资源等。所有的APP都是运行在这一层之上。Dalvik 虚拟机:Dalvik VM采用寄存...

weixin_42515225的博客 822

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【Android】 开发入门 1 概览,架构

Android开发 入门 1 概览,架构 Android是一系列软件、移动设备(例如平板电脑、手提电脑、手机、电子书阅读器、机顶盒)的集合。 它包含了基于linux的操作系统、中间件和核心移动应用。 它可以被看做移动操作系统,但不止于此,它目前在多种设备中应用如手机、平板、电视等) 安卓的特点 开源 任何人都可以自定义安卓平台 有海量应用可供选择 提供了许多有趣的功能,如天气详情、开屏、实时RSS推送 提供信息服务(短信等)、网络浏览器、储存(SQLite)、连接(GSM、CDMA、蓝牙、Wi-Fi)、媒

ljinest 1936

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Android音频架构概览

FROM:http://www.bobbog.com/archives/147 ============================ 一、架构图     二、MediaServer初始化 所有的media服务都在进程mediaserver里。其代码在framework/base/media/mediaserver/main_mediaserver.c

·没有风雨躲得过,没有坎坷不必走· 8886

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Android系统架构概览

在软件工程里面,没有一个中间层解决不了的问题。换句话说,就是"任何软件工程遇到的问题都可以通过增加一个中间层来解决"。Android系统基于这样一个分层的理念,自上而下将系统架构划分成了App Framework、Android System Service、HAL、Kernel这四个层次。

既不是天才,便做那疯子! 864

android view架构,ViewModel 概览

ViewModel 概览ViewModel 类旨在以注重生命周期的方式存储和管理界面相关的数据。ViewModel 类让数据可在发生屏幕旋转等配置更改后继续留存。注意:如需将 ViewModel导入 Android 项目,请参阅 Lifecycle 版本说明中关于声明依赖项的说明。Android 框架可以管理界面控制器(如 Activity 和 Fragment)的生命周期。Android 框架可...

weixin_39700215的博客 290
上一篇: Kotlin - 枚举类 enum
下一篇: Kotlin - 密封类、密封接口 sealed
Jomurphys
博客等级 码龄9年 1768粉丝 261原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值