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;
    }
}
复制代码


相关文章
|
2月前
|
安全 Android开发 iOS开发
深入探索Android与iOS的差异:从系统架构到用户体验
在当今的智能手机市场中,Android和iOS无疑是最受欢迎的两大操作系统。本文旨在探讨这两个平台之间的主要差异,包括它们的系统架构、开发环境、安全性、以及用户体验等方面。通过对比分析,我们可以更好地理解为何不同的用户群体可能会偏好其中一个平台,以及这些偏好背后的技术原因。
|
2月前
|
Android开发 Swift iOS开发
深入探索iOS与Android操作系统的架构差异及其对应用开发的影响
在当今数字化时代,移动设备已经成为我们日常生活和工作不可或缺的一部分。其中,iOS和Android作为全球最流行的两大移动操作系统,各自拥有独特的系统架构和设计理念。本文将深入探讨iOS与Android的系统架构差异,并分析这些差异如何影响应用开发者的开发策略和用户体验设计。通过对两者的比较,我们可以更好地理解它们各自的优势和局限性,从而为开发者提供有价值的见解,帮助他们在这两个平台上开发出更高效、更符合用户需求的应用。
|
1月前
|
存储 Linux API
深入探索Android系统架构:从内核到应用层的全面解析
本文旨在为读者提供一份详尽的Android系统架构分析,从底层的Linux内核到顶层的应用程序框架。我们将探讨Android系统的模块化设计、各层之间的交互机制以及它们如何共同协作以支持丰富多样的应用生态。通过本篇文章,开发者和爱好者可以更深入理解Android平台的工作原理,从而优化开发流程和提升应用性能。
|
1月前
|
安全 Android开发 iOS开发
深入探索iOS与Android系统架构差异及其对开发者的影响
本文旨在通过对比分析iOS和Android两大移动操作系统的系统架构,探讨它们在设计理念、技术实现及开发者生态方面的差异。不同于常规摘要仅概述内容要点,本摘要将简要触及核心议题,为读者提供对两大平台架构特点的宏观理解,铺垫
|
1月前
|
网络协议 Linux Android开发
深入探索Android系统架构与性能优化
本文旨在为读者提供一个全面的视角,以理解Android系统的架构及其关键组件。我们将探讨Android的发展历程、核心特性以及如何通过有效的策略来提升应用的性能和用户体验。本文不包含常规的技术细节,而是聚焦于系统架构层面的深入分析,以及针对开发者的实际优化建议。
54 1
|
2月前
|
IDE 安全 Android开发
深入探索Android与iOS操作系统的架构差异
本文旨在对比分析Android和iOS两大主流移动操作系统在架构设计上的根本差异。通过详细解读两者的系统架构、开发环境、以及安全性等方面,揭示它们各自的特点及优势,为开发者选择合适的平台提供参考。
|
2月前
|
安全 Android开发 iOS开发
深入探讨Android与iOS的系统架构差异
本文旨在通过对比分析Android和iOS两大移动操作系统的系统架构,揭示它们在设计理念、安全性、应用生态及开发环境等方面的显著差异。我们将从底层架构出发,逐步剖析至用户界面层面,为开发者和科技爱好者提供一份详尽的技术参考。
43 1
|
27天前
|
开发工具 Android开发 iOS开发
Android与iOS生态差异深度剖析:技术架构、开发体验与市场影响####
本文旨在深入探讨Android与iOS两大移动操作系统在技术架构、开发环境及市场表现上的核心差异,为开发者和技术爱好者提供全面的视角。通过对比分析,揭示两者如何塑造了当今多样化的移动应用生态,并对未来发展趋势进行了展望。 ####
|
2月前
|
安全 Linux Android开发
深入探索Android与iOS的系统架构:一场技术较量
在当今数字化时代,智能手机操作系统的选择成为了用户和开发者关注的焦点。本文将深入探讨Android与iOS两大主流操作系统的系统架构,分析它们各自的优势与局限性,并对比两者在用户体验、开发生态和安全性方面的差异。通过本文的技术剖析,读者将对这两个平台的核心技术有更深入的理解。
|
2月前
|
安全 Java Linux
深入解析Android系统架构及其对开发者的意义####
【10月更文挑战第21天】 本文旨在为读者揭开Android操作系统架构的神秘面纱,探讨其如何塑造现代移动应用开发格局。通过剖析Linux内核、硬件抽象层、运行时环境及应用程序框架等关键组件,揭示Android平台的强大功能与灵活性。文章强调了理解Android架构对于开发者优化应用性能、提升用户体验的重要性,并展望了未来技术趋势下Android的发展方向。 ####
49 0