Android 需要哪些架构手段(一)

简介: 关于 Android 的架构问题,想必大家都听说过 MVC、MVP 和 MVVM ,且当下又出现了更新的 MVI。诸如此类的这些架构,都是我们日常所在使用的。

前置知识

  • 已入门 Android
  • 了解过一些设计原则

前言

关于 Android 的架构问题,想必大家都听说过 MVC、MVP 和 MVVM ,且当下又出现了更新的 MVI。诸如此类的这些架构,都是我们日常所在使用的。这是我们代码设计中,对于业务开发会经常要用到的。但是除却业务开发呢?我们需要将系统分为更多层的时候需要怎么办呢?要了解哪些东西呢?

我们不妨将视野放宽,看看 Android 本身的架构,或者是其他客户端手段的架构,亦或是前端后端的架构,学习他们的架构手段,我们也能收获很多设计的思想。所以本文将会简单的讲一下一些值得我们学习的架构手段。

架构的作用

我们经常说一个架构帮助我们解耦,让我们开发得更顺畅。那么架构的作用,其出现的根本原因只是帮助我们解耦吗?

当然,架构能帮助我们进行解耦这是其出现的一个重要原因;但事实上更重要的是,它能够帮助我们解决特定领域在不同阶段发送的业务问题。它是伴随着一整个软件的生命周期而存在的,继而也要对应的解决每个生命周期中出现的问题。

我们软件周期包括:新生期、稳定期和老年期。

在新生期,架构要适应业务的不断膨胀问题;而在稳定期,架构则要让业务不断地重构和优化;最后到了老年期,架构要做的是如何让项目老得更慢,不要让过分臃肿的代码影响业务的正常运作。

1.webp.jpg

我们可以有理想的架构,一开始就设定好来解决这些个问题,但实际上,理想总归是理想,我们要接受现实的骨感。事实上,我们很难存在一个理想的架构,因为业务是不断在变化的,变化才是软件唯一的不变点,所以架构也只能随着变化而变化,不断去解决出现的问题。

Android 的架构设计

我们可以看一下 Android 的架构设计,看看它的设计是如何解决出现的问题的。

下面的图大家都很熟悉了,这里不做详细介绍,只做简单的罗列。

  • APP 层:业务代码层,在这一层实现自己的业务
  • FrameWork 层:应用框架层,开发者对系统的 UI 编写,对数据的使用和调用接口,使用的都是这一层的 API
  • Binder IPC:由于 Android 是有进程隔离的,所以使用 Binder 来跨进程高效通信
  • 系统服务层:提供窗口、音视频、相机等能力。往下是对硬件能力的封装,往上是可以通过 Binder 暴露给其他人
  • HAL 硬件抽象层:其屏蔽底层驱动的差异,使得系统服务层可以快速匹配到不同的硬件设备
  • LINUX 内核层:CPU 、内存等重要的驱动服务在这一层实现。

由此,我们可以看出,Android 内部架构的设计是很有逻辑性的,底层为高层服务,越高层使用的越是定制化的内容。

1.webp.jpg

不同领域的架构设计

由下图,我们可以看出在不同的端侧,其使用的语言、框架和平台都是不同的。但是在他们身上是可以找出共同点的,这些共同点是经过长期积累,抽象出来的方法论,是很值得我们学习的点。

公共的点包括:

  • 编程思想:OOP、IOP、IOC 等
  • 问题分解:按业务和技术分解
  • 领域建模:接口设计、DSL 等
  • 服务治理:模块化、组件化、容器化等
  • 流程机制:敏捷开发模型、软件测试手段等
  • 架构标准:公约文档,数据监测等

1.webp.jpg

所以说,对于架构的设计,我们应当知晓它是不断随着需求和出现的问题不断变更优化的,且不同的架构虽有差异,但是差异之外的共同点很值得我们去学习。

值得学习的架构手段

了解了架构的作用之后,我们需要学习一些架构手段,以便解决软件生命周期中出现的各种问题。

设计模式

要做好架构设计,首先逃不掉需要学习的点及时设计模式,而设计模式又是基于设计原则来进行拓展的。学习设计模式,其最重要的就是学习其设计思想了。设计模式 - Yj家的孺子牛的专栏

而就如前文中讲过的 volatilesynchronizesynchronize 中瘦锁容易被打断变成胖锁;而使用了 volatile 关键字之后就不会被打断。所以,我们认为使用了 volatile 关键字的单例模式更优。

这些对设计模式的深入使用的理解,是很容易影响到我们对架构设计的好坏的。

下文中,DoubleCheck 设计的单例模式就会相对更优些。

//LazySafe
public class SingleTonTest {
    private static SingleTonTest instance;
    private SingleTonTest() {
    }
    public static synchronized SingleTonTest getInstance() {
        if (instance == null) {
            instance = new SingleTonTest();
        }
        return instance;
    }
}
//DoubleCheck
public class SingleTonTest {
    private static volatile SingleTonTest singleton;
    private SingleTonTest() {
    }
    public static SingleTonTest getInstance() {
        if (singleton == null) {
            synchronized (SingleTonTest.class) {
                if (singleton == null) {
                    singleton = new SingleTonTest();
                }
            }
        }
        return singleton;
    }
}
复制代码


相关文章
|
21天前
|
存储 设计模式 数据库
构建高效的安卓应用:探究Android Jetpack架构组件
【4月更文挑战第20天】 在移动开发的世界中,构建一个既高效又可维护的安卓应用是每个开发者追求的目标。随着Android Jetpack的推出,Google为开发者提供了一套高质量的库、工具和指南,以简化应用程序开发流程。本文将深入探讨Jetpack的核心组件之一——架构组件,并展示如何将其应用于实际项目中,以提升应用的响应性和稳定性。我们将通过分析这些组件的设计原则,以及它们如何协同工作,来揭示它们对于构建现代化安卓应用的重要性。
|
6天前
|
存储 前端开发 Java
Android应用开发中的MVP架构模式实践
【5月更文挑战第5天】随着移动应用开发的复杂性增加,传统的MVC(Model-View-Controller)架构在应对大型项目时显得笨重且不灵活。本文将探讨一种更适应现代Android应用开发的架构模式——MVP(Model-View-Presenter),并展示如何在Android项目中实现该模式以提升代码的可维护性和可测试性。通过对比分析MVP与传统MVC的差异,以及提供一个实际案例,读者将能深入了解MVP的优势和实施步骤。
|
11天前
|
前端开发 测试技术 数据处理
安卓开发中的MVP架构模式深度解析
【4月更文挑战第30天】在移动应用开发领域,模型-视图-呈现器(Model-View-Presenter, MVP)是一种广泛采用的架构模式。它旨在通过解耦组件间的直接交互来提高代码的可维护性和可测试性。本文将深入探讨MVP在安卓开发中的应用,揭示其如何促进代码的模块化,提升用户界面的响应性,并简化单元测试过程。我们将从理论概念出发,逐步过渡到实践案例,为读者提供一套行之有效的MVP实施策略。
|
18天前
|
传感器 Java Android开发
Android HAL深入探索(1): 架构概述
Android HAL深入探索(1): 架构概述
29 1
|
20天前
|
设计模式 前端开发 数据库
构建高效Android应用:使用Jetpack架构组件实现MVVM模式
【4月更文挑战第21天】 在移动开发领域,构建一个既健壮又易于维护的Android应用是每个开发者的目标。随着项目复杂度的增加,传统的MVP或MVC架构往往难以应对快速变化的市场需求和复杂的业务逻辑。本文将探讨如何利用Android Jetpack中的架构组件来实施MVVM(Model-View-ViewModel)设计模式,旨在提供一个更加模块化、可测试且易于管理的代码结构。通过具体案例分析,我们将展示如何使用LiveData, ViewModel, 和Repository来实现界面与业务逻辑的分离,以及如何利用Room数据库进行持久化存储。最终,你将获得一个响应迅速、可扩展且符合现代软件工
24 0
|
27天前
|
XML 前端开发 测试技术
安卓架构模式:MVC、MVP、MVVM及更多
【4月更文挑战第13天】本文探讨了安卓应用开发中的常见架构模式,包括MVC、MVP和MVVM,以及VIPER和Clean Architecture。MVC分离关注点,易于理解,但安卓不直接支持。MVP通过呈现器实现更清晰的分层和便于单元测试。MVVM利用数据绑定简化UI逻辑,适合声明式编程。开发者应根据项目需求、团队技能和维护周期选择合适架构,随着工具和框架的进步,未来将提供更多模块化、可测试性和敏捷性的解决方案。
|
29天前
|
存储 数据库 Android开发
构建高效安卓应用:采用Jetpack架构组件优化用户体验
【4月更文挑战第12天】 在当今快速发展的数字时代,Android 应用程序的流畅性与响应速度对用户满意度至关重要。为提高应用性能并降低维护成本,开发者需寻求先进的技术解决方案。本文将探讨如何利用 Android Jetpack 中的架构组件 — 如 LiveData、ViewModel 和 Room — 来构建高质量的安卓应用。通过具体实施案例分析,我们将展示这些组件如何协同工作以实现数据持久化、界面与逻辑分离,以及确保数据的即时更新,从而优化用户体验并提升应用的可维护性和可测试性。
|
1月前
|
存储 设计模式 前端开发
构建高效安卓应用:Jetpack MVVM 架构的实践之路
【4月更文挑战第9天】 在移动开发的迅猛浪潮中,Android 平台以其开放性和灵活性受到开发者青睐。然而,随着应用复杂度的不断增加,传统的开发模式已难以满足快速迭代和高质量代码的双重要求。本文将深入探讨 Jetpack MVVM 架构模式在 Android 开发中的应用实践,揭示如何通过组件化和架构设计原则提升应用性能,实现数据驱动和UI分离,进而提高代码可维护性与测试性。我们将从理论出发,结合具体案例,逐步展开对 Jetpack MVVM 架构的全面剖析,为开发者提供一条清晰、高效的技术实施路径。
|
1月前
|
存储 SQL 数据库
构建高效Android应用:采用Jetpack架构组件的实践之路
【4月更文挑战第7天】 在快速迭代的移动开发领域,构建一个既健壮又易于维护的Android应用至关重要。本文将深入探讨如何利用Google推出的Jetpack架构组件,实现Android应用的模块化和组件化,从而提升开发效率和应用性能。我们将通过具体实例分析生命周期管理、UI控制器、数据存储等核心组件,展示其在真实应用中的运用,以及如何借助这些组件简化日常开发任务,确保代码的可扩展性和可测试性。
|
1月前
|
移动开发 前端开发 数据管理
构建高效Android应用:采用MVVM架构与LiveData的全面指南
在移动开发领域,构建一个既快速又可靠的应用对于开发者来说至关重要。随着Android Jetpack组件的推出,MVVM(Model-View-ViewModel)架构和LiveData已成为实现响应式、可测试且易于维护应用的首选解决方案。本文将深入探讨如何在Android应用中实施MVVM模式,以及如何利用LiveData来优化UI组件的数据更新流程,确保用户界面与业务逻辑之间的高度解耦和流畅交互。
21 4