当前位置: 首页 > 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;或是输入? 这些操作最终都是靠设置寄存…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

WEB3全栈开发——面试专业技能点P4数据库

一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库&#xff0c;基于 mysql 库改进而来&#xff0c;具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点&#xff1a; 支持 Promise / async-await&#xf…...

Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合

无论是python&#xff0c;或者java 的大型项目中&#xff0c;都会涉及到 自身平台微服务之间的相互调用&#xff0c;以及和第三发平台的 接口对接&#xff0c;那在python 中是怎么实现的呢&#xff1f; 在 Python Web 开发中&#xff0c;FastAPI 和 Django 是两个重要但定位不…...