当前位置: 首页 > news >正文

Android实例仿真之一

目录

零 开局三问

第一问:为什么要有这一章?

第二问:Android算不算是一个嵌入式系统?

第三问:用什么方法来分析Android这个大系统?

一 讨论Android的流行

二 深入浅出Android


零 开局三问

在正式开始这一部分之前,我们有三问需要回答。

第一问:为什么要有这一章?

因为Android有许多优点(其实我觉得最大的优点是可玩性),还有一定的复杂性和难度(从它的目标出发,可知这是必然的),并且是开源的(这是最关键的一点),所以是一个很好的学习例子,学习架构设计和软件开发的例子,值得分析。

第二问:Android算不算是一个嵌入式系统?

我认为答案是肯定的。嵌入式系统整体上看,可以分为三类(https://blog.csdn.net/wwwyue1985/article/details/119428234?spm=1001.2014.3001.5502):一类是基础级的。主要特点是不使用操作系统(纯裸机程序跑)或者只使用简单的带任务调度的操作系统,无通用驱动、网络及图形界面支持。这类系统承载的业务大多是专用的,或者说是专门为某一特定用途或功能或用户群体而定制设计的。第二类是中等级的。主要特点是使用像Linux这类通用操作系统,有图形界面支持,具备一定的通用性,但主要还是为某些复杂功能或通用类用途而设计,包含实时系统和非实时系统。这一类系统对第三方扩展开发的支持有限。第三类是高等级的。主要特点是采用比较完善的通用操作系统,支持各类应用开发,被称为智能系统。像Android就属于这一类。显然,第三类是最庞杂(注意,博主这里用了庞杂,而非复杂)、最通用的,所以其架构灵活度也是最大的,值得学习。

第三问:用什么方法来分析Android这个大系统?

这里可以仿照《深入浅出MFC》一书(侯捷著),对Android框架也做个抽丝剥茧的手术,去掉各种外包装,留下主要骨架(就像龙门客栈里展示的庖丁解牛术),并仿照其骨架进行一个仿真。如此,则能去其繁杂,学其精髓,值得尝试。

  

一 讨论Android的流行

   不知读者有没有思考过,当我们准备开发一款应用时,需要考虑哪些基本的东西?

   现思考也来得及,至少能想出来如下三点吧:

   1 语言选择:选项很多,但是,用C++还是JAVA亦或其他语言,这是个不小的问题,需要综合考虑。有时候,选项太多,也会是个麻烦事。

   2 平台选择:基于操作系统,目前主流的有Linux、Windows、Android、iOS。这块根据目标用户,业务场景等,相对好选择一些。对于移动端的开发,其实Android和iOS都是需要的。

   3 开发环境:1和2选好了,这块也基本就能够确定了。采用成熟流行的IDE,还是能够提升不少开发效率的。至少像拼写这种低级错误,能够避免不少。

   俗话说,工欲善其事必先利其器。除了上面三个大问题外,编辑、设计、编译、调试、配置管理等等工具,也是必须要准备好的。专业的事不仅要交给专业的人,还需要交给专业的工具。在软件开发中,尤其如此。

   当然,我们可以把问题再拓展一下。比如这样问,假设你是一个平台供应商(比如是Google和Apple),如何为开发者提供应用开发的一条龙服务?此时考虑的东西就多了,我们在之前关于Android技术生态构成的讨论中提到过这些内容(https://blog.csdn.net/wwwyue1985/article/details/128759826)。平台搭建就好比是盖楼,要完成大部分看不见的工作,像是地基、管线等,然后留给开发者所见即所得的房屋装饰和配置工作。这有点像SaaS,通用的事情都由平台完成了。回到问题本身,具体来说,除了前面提到的工具外,至少还要包括了基础库、编译器、连接器、SDK、文档、示例、模拟器、开发模型及规范、构建工具、发布平台等等。

   我们的生活已经离不开各种各样的软件和工具,也就是大家俗称的各种应用。苹果公司的产品之所以畅销,不仅仅是他优秀的软硬件一体化融合设计,更是各种丰富的应用,吸引了开发者、投资者,最终也吸引了用户。Windows当年打天下,正是依赖其上的应用越来越丰富,用户已经形成了一种依赖,对平台的依赖。

   在一个系统中,应用可以看做是一个具有一定功能的模块,可以完成一个具体的任务,为用户使用系统资源提供便利。

   我们前面说了,平台搭建好比是盖楼,那开发一款应用,就类似于装修一个房子。首先要有目标用途,是商铺还是自住。如果是商铺,那饭店和修理店的装修需求显然是不一样的,这就需要收集需求,做设计,画图纸,进行完善的规划。前期工作准备充分了,再开始具体施工。开发一款应用也是类似,同样也需要有图纸,进行前期的架构设计,进度计划等。之后才由IT民工将设计转换成代码。只不过软件应用的开发,很多工作都是思维逻辑性的,不需要水泥、沙子、石灰,且复制成本极低。

   还有一点,你会发现二者在基础依赖这方面也很像。对于房屋装修来讲,如果开发商没有提供部分管道,装修时想要实现,那就比较麻烦了。比如早期的楼,没有考虑到网络入口,后续就只能在走廊过道等地方拉线。同样,如果软件平台没有提供某些基础功能支持,想在应用里实现,同样很难。比如,应用想要一个1毫秒的定时器,而底层只能提供精度为10毫秒的定时器,那这个1毫秒定时器就无法实现了。

   前面提到了,软件的复制成本极低,这是软件不同于其他行业的一个最明显特点。所以,我们开发的应用,就需要运行在流行的平台上,这样应用才能为更多的用户所接触和使用,产生最大的价值。这就产生了一个新的问题,如何提供流行的平台?

   Android从出生开始,就迅速流行了起来,所以Android的流行值得我们思考。这里我提几点供大家参考:一是Google使用了Java作为应用的开发语言,降低了开发者的学习成本;二是Google开源了系统,迅速吸引了硬件和设备厂商;三是Google大量使用了开源软件,在最短的时间内完成并推出了基本系统,使得用户得以尽早利用这个平台。俗话说“一步先步步先”,先人一步,在软件领域的重要性不需要多言,微信就是最好的例子。

   之后,Google在不影响整个应用生态基础的前提下,不断优化系统底层。可见,Google在最开始把好钢用在了刀刃上,先提供并优先保证应用API的可用性。后期在迭代过程中保持稳定性,最终在整个智能手机浪潮中占得最重要的领域:操作系统;并在操作系统领域占得最重要的元素:先机。现在我们可以看到,Google已经优化或者替换了大量底层的开源组件。如果Google一开始就从底向上自己从头设计系统,那么在移动平台这个赛道的竞争中不见得能够取胜。现在Google不仅在替换许多开源基础组件,甚至要替换Linux内核,并已经替换了上层的Java语言,这些都是利用垄断优势才可以做到的。

   先有再优,Google正是凭借这一点,让Android流行并壮大起来。关于有优的思想原则,另一个典型的例子就是Windows NT之父大卫卡特勒。在NT开发期间,其也是坚持先开发功能再优化性能。这世界上本就没有多少最佳方案,更多的是合适不合适。

二 深入浅出Android

   前面提到,可以参考侯捷的《深入浅出MFC》来分析Android大系统。那具体怎么做呢?可以从最简单的进程间通信开始,搭建一个基础模型,一步一步丰富功能,到接近一个Android系统。这就有点类似核心主干的仿真了。可以在丰富内容的过程中,添加嵌入式系统领域积累的知识,比如背后的本质东西等。像进程间通信、消息队列、消息循环等。通过深入浅出的了解,最终当作一个标准组件。这就如理解计算机工作的过程,最后就是概念不断积累,细节不断隐藏,认识不断升华的过程。比如组成原理中的CPU、内存、磁盘、网络等,深入的话,有一堆细节;浅出的话,就是一个一个的模块;放在一起的话,就成了一个拥有特异功能的神奇机器。

   还有一种方式,就是按照从上到下的方式进行分析,从应用到硬件,逐层递进。这是我们常规的学习方法。具体展开时,可以灵活把握,比如采用发散的树形方式,总的Android系统,到大的模块,再到小的模块,再到细节。这也是一种方法。

   关于Android的框架,不是简单介绍有哪些类,画个类图,然后介绍到进程通信就完了。关键是要介绍背后工作的机理原理,而非简单的接口罗列,这些才是重点。通过进程通信,获取服务,启动Activity,暂停Activity等等,这些方面的介绍已经很多了,但是服务怎么启动,怎么暂停的,怎么涉及到底层的,这些核心的东西并没有挖掘出来,特别是有哪些进程,负责了哪些服务,如果能够通过图示将这些展示出来,这样才算是更完整的剖析了设计者的思想。

   要完成这部分的工作,或者说达到通透的目的,就必须进行真正的仿真,并记录过程。不过,这是一个庞大的工作,一下子搞定是有点难度的。下面几节我们围绕这个目的,先尝试按这种思路,开个头,做一部分分析工作。

相关文章:

Android实例仿真之一

目录 零 开局三问 第一问:为什么要有这一章? 第二问:Android算不算是一个嵌入式系统? 第三问:用什么方法来分析Android这个大系统? 一 讨论Android的流行 二 深入浅出Android 零 开局三问 在正式开始…...

软考高级-信息系统管理师之重要工具和技术的口语化表示(最新版)

重要工具和技术的口语化表示 本文主要介绍重要工具和技术的口语化解释 1、 模板、表格和标准:就是用之前的项目的模版、表格、标准,结合本项目进行了修改,在编制一些计划、方案的时候就可以采用这个工具和技术。可以拿来就用的,节约时间、提高质量的。 2、 产品分析:通过一…...

基于springboot+vue的个人健康信息服务平台

基于springbootvue的个人健康信息服务平台 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背…...

SpringBoot2.x实战专题——SpringBoot2 多配置文件【开发环境、测试环境、生产环境】

SpringBoot2.x实战专题——SpringBoot2 多配置文件【开发环境、测试环境、生产环境】 目录SpringBoot2.x实战专题——SpringBoot2 多配置文件【开发环境、测试环境、生产环境】一、创建一个SpringBoot项目二、修改pom.xml中SpringBoot的版本三、配置文件3.1 application-dev.ym…...

测试2:编写测试用例的方法

2.编写测试用例的方法 7种 测试常用的方法:code review 代码静态分析、CI/CD CI–持续集成–开发成员经常集成它们的工作,尽快发现集成错误 CD–持续部署–将集成后的代码部署到更贴近真实运行的环境 2.1 测试用例的描述: 用例编号 用例…...

docker安装配置镜像加速器-拉取创建Mysql容器示例

List item docker 常见命令大全docker安装docker拉取创建Mysql容器docker 安装 1、安装链接:https://blog.csdn.net/BThinker/article/details/123358697 ; 2、安装完成需要配置docker镜像加速器 3、docker 镜像加速器推荐使用阿里云的: 编…...

WSL1和WSL2相互转换以及安装路径迁移相关问题

目录 1.从WSL 1如何切换到WSL 2? 2.从WSL 2如何切换回WSL 1? 3.WSL1转换为WSL2后,WSL1里面安装的程序和库需要重装吗? 4.WSL2转换为WSL1后,WSL2里面安装的程序和库需要重装吗? 5.如何备份WSL2&#xf…...

系统分析*

文章目录系统分析分析的任务结构化方法OO的方法的任务常用的详细调查方法有哪些?系统分析的建模TFD业务流程图DFDDD数据流图用例模型(重点用例图)用例图的内容:用例之间的关系:对象模型(类图)时…...

【redis】持久化:RDB和AOF

redis的持久化指将数据写入可靠内存中,如ssd。Redis提供了4种持久化策略 RDB:Redis Database,周期性的将某个时间点的数据集快照持久化AOF:Append Only File,每次redis服务接收到写操作(修改内存的操作),都…...

2023Python接口自动化测试实战教程,附视频实战讲解

这两天一直在找直接用python做接口自动化的方法,在网上也搜了一些博客参考,今天自己动手试了一下。 一、整体结构 上图是项目的目录结构,下面主要介绍下每个目录的作用。 Common:公共方法:主要放置公共的操作的类,比如数据库sql…...

【原创】java+swing+sqlserver药品管理系统设计与实现

之前数据库都是用的mysql,今天我们使用sqlserver在配合swing来开发一个药品管理系统。方便医院工作人员进行药品的管理,基础功能基本都是一些增删改查操作。 功能分析: 药品管理系统主要提供给管理员和员工使用,功能如下&#x…...

软考高级信息系统项目管理师系列之二十七:信息文档管理与配置管理

软考高级信息系统项目管理师系列之二十七:信息文档管理与配置管理 一、信息文档管理与配置管理内容整理二、信息系统文档管理1.信息系统文档概念2.软件文档分类与质量等级三、配置管理1.配置管理2.典型配置项3.配置项4.配置项操作权限5.配置项状态6.配置项版本号7.配置项版本管…...

软考高级-信息系统管理师之项目管理基础(最新版)

项目管理基础 项目管理特点战略管理三个过程IT项目特点项目管理概念项目管理特点软技能PRINCE2的四个要素组织结构职能型组织优缺点职能型组织优点同时,职能型组织也存在着如下缺点:项目型组织优缺点项目型组织优点项目型组织也存在着如下缺点:矩阵型组织优缺点矩阵型组织的优…...

leetcode240+Search a 2D Matrix II+从右上角开始

链接 class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {if(matrix.size()0 || matrix[0].size()0) return false;int i0, jmatrix[0].size()-1; //从右上角开始while (i<matrix.size()&&j>0) {int x mat…...

0xL4ugh 2023

这回跟着个队伍跑&#xff0c;不过还是2X以后的成绩&#xff0c;前边太卷了。自己会的部分&#xff0c;有些是别人已经提交了的。记录一下。Cryptocrypto 1给了一些数据&#xff0c;像这样就没有别的了ct [0, 1, 1, 2, 5, 10, 20, 40, 79, 159, 317, 635, 1269, 2538, 5077, 1…...

Mybatis(4)之跟着老杜做一个简单的银行转账会话

这是个MVC项目&#xff0c;我不一定可以完整的实现这个项目&#xff0c;但力求把这个复现出来&#xff0c;尽量的复现细节。 第一步&#xff1a;创建数据库 表 创建表如下&#xff1a; 我们使用 int 是为了方便 然后采用 demcial&#xff0c;精确度较高 添加两个用户 然后…...

VBA提高篇_ 22 事件处理

文章目录1.事件编程2.常用工作簿事件名称与对应处理过程名称示例3. 事件编程的步骤4&#xff0e;工作簿事件4.1 Open4.2 BeforeClose4.3 NewSheet5&#xff0e;工作表事件6&#xff0e;变量和过程函数的作用域1.事件编程 写在事件发生地(对应工作簿或工作表) 2.常用工作簿事…...

【蓝桥杯集训·周赛】AcWing 第91场周赛

文章目录第一题 AcWing 4861. 构造数列一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解第二题 AcWing 4862. 浇花一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解第三题 AcWing 4861. 构造数列一、题目1、原题…...

【人工智能AI】三、NoSQL 实战《NoSQL 企业级基础入门与进阶实战》

帮我写一篇介绍NoSQL的技术文章&#xff0c;文章标题是《NoSQL 实战》&#xff0c;不少于3000字。这篇文章的目录是 3.NoSQL 实战 3.1 MongoDB 入门 3.1.1 MongoDB 基本概念 3.1.2 MongoDB 安装与配置 3.1.3 MongoDB 数据库操作 3.2 Redis 入门 3.2.1 Redis 基本概念 3.2.2 Red…...

platform 总线

驱动的分离与分层思想 分离&#xff1a;硬件信息分离&#xff1b; 在编写硬件驱动的时候&#xff0c;需要操作许多硬件寄存器。比如gpio 驱动&#xff0c;你需要知道gpio控制器 寄存器的地址&#xff0c;你想要哪个gpio输出&#xff1f;或是输入? 这些操作最终都是靠设置寄存…...

DoL-Lyra整合包完整使用指南:5分钟掌握汉化版Degrees of Lewdity一键安装

DoL-Lyra整合包完整使用指南&#xff1a;5分钟掌握汉化版Degrees of Lewdity一键安装 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS DoL-Lyra整合包为Degrees of Lewdity玩家提供了一站式解决方案&…...

OpenClaw自动化测试:百川2-13B-4bits量化模型在重复任务中的稳定性

OpenClaw自动化测试&#xff1a;百川2-13B-4bits量化模型在重复任务中的稳定性 1. 测试背景与目标 最近在尝试用OpenClaw搭建一个本地自动化工作流时&#xff0c;发现一个关键问题&#xff1a;当AI需要反复执行相同任务时&#xff0c;模型响应的稳定性会直接影响自动化效果。…...

如何5分钟快速安装Ghidra:新手逆向工程终极指南

如何5分钟快速安装Ghidra&#xff1a;新手逆向工程终极指南 【免费下载链接】ghidra_installer Helper scripts to set up OpenJDK 11 and scale Ghidra for 4K on Ubuntu 18.04 / 18.10 项目地址: https://gitcode.com/gh_mirrors/gh/ghidra_installer Ghidra作为美国国…...

USB设备安全弹出工具终极指南:告别Windows繁琐移除,一键搞定所有存储设备

USB设备安全弹出工具终极指南&#xff1a;告别Windows繁琐移除&#xff0c;一键搞定所有存储设备 【免费下载链接】USB-Disk-Ejector A program that allows you to quickly remove drives in Windows. It can eject USB disks, Firewire disks and memory cards. It is a quic…...

WorkBuddy杀疯了?一群AI专家帮我打工,我在微信里当赛博虾工头!

梦瑶 发自 凹非寺量子位 | 公众号 QbitAI到底是谁说&#xff0c;给老板打工自己就当不成老板的&#xff1f;又是谁说&#xff0c;龙虾不好用、还不听使唤的&#xff1f;反正这些事儿&#xff0c;现在跟我没啥关系了。毕竟现在的我&#xff0c;已经转头当起了「虾工头」&#xf…...

为什么你的USB设备总接触不良?A/B型接口物理结构对比与耐久性测试

为什么你的USB设备总接触不良&#xff1f;A/B型接口物理结构对比与耐久性测试 每次给手机充电都要反复调整角度&#xff0c;打印机线稍微碰一下就断开连接——这些恼人的USB接口问题&#xff0c;本质上都是物理结构设计的差异在作祟。作为消费电子领域最基础的连接标准&#xf…...

【深度解析】DeepSeek API 悄然分叉:开发者该如何正确评估与接入最新大模型?

摘要 本文基于近期 DeepSeek API 更新及官方文档变更&#xff0c;从「API 版本 ≠ Web/App 版本」这一关键细节出发&#xff0c;梳理大模型多版本部署策略背后的技术与成本逻辑&#xff0c;并给出基于兼容 OpenAI 协议的实战接入示例&#xff08;使用 claude‑sonnet‑4‑6&…...

Qwen3-ASR-1.7B部署案例:AI初创公司低成本构建ASR SaaS服务

Qwen3-ASR-1.7B部署案例&#xff1a;AI初创公司低成本构建ASR SaaS服务 想象一下&#xff0c;你是一家AI初创公司的技术负责人&#xff0c;老板给你下了个任务&#xff1a;两周内&#xff0c;为公司的新产品上线一个语音转文字&#xff08;ASR&#xff09;功能。要求是识别要准…...

MelonLoader终极指南:3分钟掌握Unity游戏模组加载器完整使用技巧

MelonLoader终极指南&#xff1a;3分钟掌握Unity游戏模组加载器完整使用技巧 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader Me…...

突破信息获取壁垒:智能内容解锁工具使用指南

突破信息获取壁垒&#xff1a;智能内容解锁工具使用指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 你是否曾遇到这样的情况&#xff1a;一篇专业的技术文章、一份重要的研究报告…...