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

网站建设发展方向怎么写/全国十大教育机构

网站建设发展方向怎么写,全国十大教育机构,企业展厅建筑外观,北京app开发网站建设目录 四 Android架构探究 五 大骨架仿真 六 Android实例分析思路拓展 四 Android架构探究 首先,Android系统所带来的好处,就在于它本身代码的开放性,这提供了一个学习、借鉴的平台。这对分析仿真而言,本身就是一大利好&#xf…

目录

四 Android架构探究

五 大骨架仿真

六 Android实例分析思路拓展


四 Android架构探究

   首先,Android系统所带来的好处,就在于它本身代码的开放性,这提供了一个学习、借鉴的平台。这对分析仿真而言,本身就是一大利好,可以更深入的探究,更加接近真实情况。其次,从Android系统中所学的东西也可以运用于其他一些系统的设计中(额外的,它使用的优秀开源软件及使用方法也是值得学习运用的)。最后,这种公开性所开放出来的底层修改机会,也使得在Android系统本身上可以有一番作为,比如对系统进行优化。

   Android系统的作用是支撑一个个的APP,所以,每一个APP都应该平等的享用系统的资源,不管是硬件资源还是软件资源,并且,APP之间的地位也是平等的。如此一来,就存在两个部分,一个是系统管理部分,为各个APP服务,一个是APP们,平等的跟管理者交互。对于Windows系统,也是如此。管理者提供系统服务,APP们通过管理者,使用系统资源。将这种情况简化,那么一般的嵌入式系统产品,就是一个APP跟一些个服务交互。因为不会有人为这些个特殊的嵌入式产品编写APP,所以,不需要对服务和服务的使用者进行过多封装。反而,从这个角度来看,因为共享需求,Android将系统资源封装,供每个APP使用则是合理的,而且也是得体的,既不存在大材小用问题,也不存在设计浪费问题,更不存在多而无用的问题。

   框架在此中,充当了中间件的作用。

   框架在此中,也类似于C库,作为一种共享库,存在于每一个APP中。因此,框架是一套逻辑,将各个部分管理(粘)到一起的逻辑。就如同博主在这篇讨论框架的文章中所述,软件架构及几种典型框架_龙赤子的博客-CSDN博客_软件架构,通常我们看到main函数是第一个被调用的入口函数,但是实际上,main只是程序框架给我们的入口。我们在Android开发中,不用从main开始第一行代码编写,也只是因为框架帮我们实现了main该做的事情。这个过程中,框架进行了二次封装。框架设计了一套逻辑共享库,每一个应用集成该共享库,应用不用实现main接口,只需集成共享库的类接口即可。应用起来后,实现在共享库中的框架逻辑会调用main接口,并且会自动调用运行周期各个点上注册的函数。如此,我们写的代码,就跟框架融合在一起了。

   最终,大家共享的就是逻辑,就是框架中的逻辑。框架中的全局变量不会产生影响,因为应用之间是相互隔离的。框架只需处理好内部的共享即可。对于应用之间的交互,框架会依赖系统服务完成。关于这些,可以参考之前第三部分的说明。

   再多说一些。我们可以从不同角度看框架的作用与价值。注意,框架不是虚的,它有承载的实体。从静态的角度来看,架构是一个层,既是分割层,也是中间层,更是粘合层。

   框架提供逻辑与功能共享,为所有服务和APP所共享。此时,从进程角度来看,框架的逻辑存在于每一个实体进程之中。大家按照框架给的统一模式来编写个性代码。如果还以房子为例的话,统一的框架表示了房屋的承重、管道等,大家是一样的,但是每家利用这些资源装修后的房子,是不一样的。再举个之前一直用的形象例子,开网店。框架提供的各种资源是统一接口的,比如CPU、内存、存储、网络、显示等等。每一家利用这些资源,开发构建的各自网店不仅样式不一样,功能更是多了去了。卖书的店铺跟卖手机的店铺关注的点肯定是不一样的。

   基于上面的分析和Android系统的学习,结合第三部分的思考,整理了Android系统与Android内部Framework框架之间关系的一幅图,如下:

 

   Android Framework图示说明:

   先看左上图,这是Android启动的简略过程。通过这个过程,我们会了解到zygote的原理。这是整个讨论的基础。

   再看右上图,上面部分是系统框架和应用的分层对应图。下面是应用的三种运行状态。第一种,应用不需要与外部沟通,只依赖框架内部逻辑。第二种,应用需要通过框架,跟其他服务沟通,完成功能。第三种,应用可用自己与系统底层沟通,完成功能。正常来讲,部分服务实现的也是这种方式,从而将系统资源提供给大家共享。

   最后,看下图,粗略展示了几种状态的运行关系。应用和服务依赖框架注册到服务管理模块,并依赖内核提供的沟通机制,实现进程间的通信。这部分是对图上半部分左右两块的另一个视角展示。

   对于图中嵌入的诸多小方块,其涉及应用和框架内置的代码逻辑。关于这部分,说明如下:

   先从编译开始,用户编写Java文件,提供布局,UI语言等其他文件和资源。Java编译为class字节文件,其他图片、C/C++动态库等资源直接打包,运行时再按照规则处理。

   对于Java编译,分三种情况:

   第一种,独立不依赖其他模块的Java代码,直接编译为Java字节码即可,设备中的虚拟机会解读这些字节码并执行它们。

   第二种,依赖第三方jar文件,编译时需要导入class文件,以便编译时遇到未知接口时可以查找这些依赖文件,找到接口所在文件,并将其关联起来,从而形成一个整体。打包时需要导入安装包中。这也算是框架的一部分,或者说是整个拼图的一部分。

   第三种,系统自身提供的jar文件,比如android.jar。需要根据SDK提供的不同版本选择合适的版本使用。构成本身同样为class文件,编译遇到未知接口时会查找连接(这就是为什么IDE中要下载相关的SDK),并形成一个整体。这部分跟第三方依赖库可能有些差异。第三方依赖库是需要打包到安装包中的,因为系统不能保证内部包含特定APP依赖的特定第三方jar。但是对于系统自身提供的jar,可能没必要将所有的都打包到APP中,因为系统在应用环境构建时,公共的部分已经加载到系统中了。这就类似我们用C、C++编写程序,在二进制代码中会标出来需要使用标准库,但是并不实际打包到可执行程序文件中。程序实际加载运行时,操作系统会帮助解决依赖的标准库问题。我想Android也是类似的。

   从进程运行角度来看,通过框架的分割,实现了逻辑的相互隔离,并减少了逻辑上的缠绕。框架存在于进程之中,服务于实体之间的交互,也在上图中得到了体现。总的来讲,这部分既是对第三部分的进一步确认和细化,也是我们做框架大骨架仿真的一个基础(一个尝试)。

   为强化对上面内容的理解,我们再举两个例子。一个是想象的例子,一个是实际的例子。先看想象的例子:

 

   上面以应用显示为例子。系统中有一个处理显示合成渲染的进程,所有应用要显示的内容,都是告诉该进程来完成的。这个告诉过程,就由框架来完成了。另外,不同应用功能不同,用到框架中的资源也不一样。比如一个带WIFI相关功能的应用跟一个单纯打电话的应用,对框架资源使用的部分肯定是不同的,但这并不影响框架发挥作用。

   下面再看看实际的例子。

 

   上面两图展示了博主做的一个IPTV应用架构,该应用基于Android平台。该应用要用到浏览器,并且要对浏览器进行改造,因此,博主将系统的浏览器复制了一份,给该IPTV应用单独提供了一个特供浏览器。这个特制浏览器跟系统原生浏览器基本一致,只是增加了对一些自定义JS对象的支持。

 

   为了给自己的应用提供一个特制浏览器,博主将Android浏览器从底层到上层都复制了一份。这样从静态来看,应用Framework中就包含了两个浏览器核心。只不过我们专门改过的那份核心,别的应用调用不到。从动态来看,应用层代码逻辑复制了一份,底层动态库也复制了一份,所以应用进程空间中,浏览器相关的代码都有两份,而且浏览器中有关线程的创建也会多一份,最终造成的结果就是系统默认自带的那个浏览器核心代码在IPTV应用中永远不会调到,也不会参与网页的渲染。

   从这个例子,大家也可以感受一下框架的魅力。

五 大骨架仿真

   暂略。

六 Android实例分析思路拓展

   补充说明:在第五部分展开之前,再整理一下思路。

   实例:Android运行时的情景分析

   以运行时内存中的各个进程为对象,来研究各个类的实现。从这个角度看的话,代码的实现都可以看成是逻辑的堆彻,是静态的,提供了设计精巧的条条通道,通过这些通道彼此关联起来,以便再运行时彼此交互。这种思路更加接近于逻辑控制,而我们常常还停留在流程控制上。(其实,我们理解一个事物,往往喜欢从流程入手,这样更容易一些。但当我们认识到一定程度后,流程的东西反而成了拖累。此时,就喜欢从抽象的角度来看待问题,这样能够看到更本质的东西。而那些流程上的细节,已经内化于心,被隐藏起来了)。

   另外一种运行时情景分析【进程运行时情景分析】

   1 全局变量在任务之外

   2 构建内存运行时情景图,比如代码段,数据段等

   3 数据结构在内存中的样式和作用

   4 深刻理解程序就是数据结构加算法这一说

   5 任务也就是线程与进程的内存情景

   6 从内存情景图着手,分析代码的执行流程,感受内存中数据结构及其附带的Buffer的变化,实际了解程序执行。

图片1 外框内存田 内框进程 进程内框分任务和数据,参考操作系统概念一书

图片2 内存中运行的程序进行拍照,快照图 时刻1 时刻2 时刻3等等的图片,通过加粗变化的地方,感受2和5描述的内容

   第三种情景分析角度,通过进程分析Android服务。这是很多讲述Android架构的书籍所忽略的一点。使用PS命令看进程及其父子关系,分析各个服务。这是从动的角度来分析逻辑的东西。

   其实还可以学架构设计中的做法,分不同的角度来分析,比如逻辑图、框架图、物理图、进程图、开发图等等。就像矩阵的变换一样,东西还是那个东西,但是变化一下角度,就能看到不一样的内容。这里也是如此,通过不同的角度,对程序的运行情景有一个完整的认识。

   以上记录一些框框思路,后续有时间补充具体内容。

相关文章:

Android实例仿真之三

目录 四 Android架构探究 五 大骨架仿真 六 Android实例分析思路拓展 四 Android架构探究 首先,Android系统所带来的好处,就在于它本身代码的开放性,这提供了一个学习、借鉴的平台。这对分析仿真而言,本身就是一大利好&#xf…...

关于MySQL的limit优化

1、前提 提示:只适用于InnoDB引擎 2、InnoDB存储特点 它把索引和数据放在了一个文件中,就是聚集索引。这与MyISAM引擎是不一样的。 3、SQL示例 -- 给cve字段建立索引 select * from cnnvd where cveCVE-2022-24808 limit 300000,10;由于M…...

Java-Stream流基本使用

collection.stream将会破坏原有的数据结构&#xff0c;可以通过collect方法收集&#xff0c;可以用Collectors提供的构造器&#xff0c;add等方法构造形成新的数据结构。 HashSet<List<Integer>> rs new HashSet<>(); rs.stream().toList();Collection集合转…...

Liunx(狂神课堂笔记)

一.常用命令 1. cd 切换目录 cd ./* 当前目录cd /* 绝对路径cd .. 返回上一级目录cd ~ 回到当前目录pwd …...

【史上最全面esp32教程】点灯大师篇

文章目录前言ESP32简介认识arduino的两个函数点灯步骤函数介绍LED灯闪烁流水灯总结前言 esp32有很多的功能&#xff0c;例如wifi&#xff0c;蓝牙等&#xff0c;这节我们学习最简单的点灯。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 ESP32简介 …...

【Java 面试合集】内存中为什么要区分栈和堆

内存中为什么要区分栈和堆 1. 概述 嗨&#xff0c;大家好Java 面试合集又来了&#xff0c;今天我们分享的主题很大众化以及普通。无论是Java 语言本身还是别的语言都会有所涉及&#xff0c;但是今天我们从Java角度来讲下 2. 分析 今天我们会从多个方向来分享这个话题 2.1 栈是…...

【NLP实战】Python字符串处理

一、Python字符串基本操作 1. 去掉前后的特殊字符&#xff08;strip&#xff09; Python的strip操作可以去除字符串前后的空格&#xff08;不改变原串&#xff09;下例将前后的空格均删掉&#x1f447; str 人工智能 str.strip() # OUT:人工智能rstrip删除右边的空格&a…...

17.CSS伪类

举一个简单的例子来说明什么是伪类&#xff1f; 从之前的代码中&#xff0c;如下图&#xff0c;我们像给这两个列表中的某一列单独设置样式&#xff0c;我们该如何做呢&#xff1f; 我们肯定会选择在li标签上添加class去实现&#xff0c;如下 开始标记结束标记实际元素 <…...

数据链路层

一.以太网数据链路层考虑的是相邻两个节点&#xff08;通过网线/光纤、无线直接相连的两个设备&#xff09;之间的传输&#xff0c;这里的典型协议中最知名的就是“以太网”这个协议了数据链路层&#xff0c;也规定了物理层的内容以太网帧格式&#xff1a;IP地址用来描述整个传…...

投票需要什么流程微信投票互助平台的免费投票平台搭建

“最美家政人”网络评选投票_免费小程序投票推广_小程序投票平台好处手机互联网给所有人都带来不同程度的便利&#xff0c;而微信已经成为国民的系统级别的应用。现在很多人都会在微信群或朋友圈里转发投票&#xff0c;对于运营及推广来说找一个合适的投票小程序能够提高工作效…...

数据结构——算法的时间复杂度

&#x1f307;个人主页&#xff1a;_麦麦_ &#x1f4da;今日名言&#xff1a;生命中曾经有过的所有灿烂&#xff0c;都终究需要用寂寞来偿还。——《百年孤独》 目录 一、前言 二、正文 1.算法效率 1.1如何衡量一个算法的好坏 1.2算法的复杂度 2. 时间复杂度 2.1时间复杂度的…...

Go基础-类型

文章目录1 bool2 有符号整数3 无符号整数4 浮点数5 复数6 string7 关于类型转型1 bool bool类型有两个值&#xff0c;一个是true&#xff0c;一个是false。 测试 package mainimport "fmt"func main() {a : trueb : falsec : a && bd : a || bfmt.Println(a…...

良许翻天覆地的2022年

大家好&#xff0c;我是良许&#xff0c;新年快乐呀~ 在我女室友坚持不懈的努力之下&#xff0c;2022年的最后一天我终于被她传染了&#xff0c;阳了~ 此时的我&#xff0c;正顶着37多度的低烧写下这篇年终总结。 2022年&#xff0c;对于大多数人而言&#xff0c;封控是主旋…...

node+vue微信小程序的社区后勤报修系统

社区后勤报修系统小程序进行总体设计和详细设计。总体设计主要包括小程序功能设计、小程序总体结构设计、小程序数据结构设计和小程序安全设计等&#xff1a;详细设计主要包括社区后勤报修系统小程序数据库访问的实现,主要功能模块的具体实现,模块实现关键代码等。最后对社区后…...

WSL(Windows Subsystem for Linux)

一、WSL优势 •传统方式&#xff1a;获取Linux操作系统环境&#xff0c;必须安装完整的虚拟机&#xff0c;如VMware•WSL&#xff1a;以非常轻量化的方式&#xff0c;得到Linux系统环境总结&#xff1a;WSL更方便&#xff0c;简单、好用、轻量化、省内存 二、什么是WSL ①不…...

华为OD机试题 - 单词反转(JavaScript)

最近更新的博客 华为OD机试题 - 任务总执行时长(JavaScript) 华为OD机试题 - 开放日活动(JavaScript) 华为OD机试 - 最近的点 | 备考思路,刷题要点,答疑 【新解法】 华为OD机试题 - 最小步骤数(JavaScript) 华为OD机试题 - 任务混部(JavaScript) 华为OD机试题 - N 进…...

人工智能原理复习 | 产生式系统的搜索策略

文章目录 一、回溯策略二、图搜索策略三、A 算法与 A* 算法CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 主要内容:回溯策略、图搜索策略(无信息的图搜索、启发式的图搜索)、A 算法与 A* 算法 一、回溯策略 回溯算法(BackTracking Algorithm) 实际上是一个类似枚举的搜…...

初始C语言 - 数组(一维数组、二维数组、数组越界、数组传参)

目录 一、一维数组的创建和初始化 1、数组的创建 2、 数组的初始化 3.一维数组的使用 数组通过下标来访问 总结: 1. 数组是使用下标来访问的&#xff0c;下标是从0开始。 2. 数组的大小可以通过计算得到。 4、一维数组在内存中的存储 二、 二维数组的创建和初始化 1.二…...

人工智能原理复习 | 可分解产生式系统的搜索策略

文章目录 一、前言二、基础知识三、AO* 算法四、博弈树搜索五、总结CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 主要内容: 与 / {/} /或图搜索、AO* 算法、极大极小过程、...

线段树(维护区间信息)

一&#xff0c;定义&#xff1a; 可以在logN时间内实现区间修改&#xff0c;单点修改&#xff0c;区间查询等操作的工具 二&#xff0c;思路&#xff08;修改无乘法时&#xff09;&#xff1a; 1&#xff0c;建树 通过把区间不断二分建立一颗二叉树 我们以维护一个数组a{1…...

C语言 基于Ncurse库的贪吃蛇游戏项目

为了敲键盘及时响应&#xff0c;需要用到ncurse 测试代码&#xff1a; ncurse1.c /* ncurse1.c */ #include <curses.h> //ncurse的头文件。int main() {char c;int i 0;//ncurse界面的初始化函数。initscr(); for(i0;i<2;i){c getch();printw("\n");//…...

【Java基础】Java语言特性

认识Java java语言的执行过程 编写纯文本文件 .java 经过javac编译器(java complier)编译 .class .class是二进制的字节码 在源文件中定义几个类&#xff0c;就会生成几个 由JVM运行 .class JVM把字节码编译成可以在处理器上运行的高性能的本地代码&#xff08;native code),…...

python进阶--Numyp库(一)

一、Numpy库介绍 NumPy&#xff08;Numerical Python&#xff09;是Python的⼀种开源的数值计算扩展。提供多维数组对象&#xff0c;各种派⽣对象&#xff08;如掩码数组和矩阵&#xff09;&#xff0c;这种⼯具可⽤来存储和处理⼤型矩阵&#xff0c;⽐Python⾃身的嵌套列表&am…...

CV学习笔记-Inception

CV学习笔记-Inception 目录 文章目录CV学习笔记-Inception目录1. 常见的卷积神经网络2. Inception(1) Inception提出背景(2) Inception module 核心思想3. Inception的历史版本(1) InceptionV1-GoogleNet(2) InceptionV2(3) InceptionV3(4) Inception V44. Inception模型的特点…...

注意力机制笔记——结合沐神和B站老弓up主

B站【大白话浅谈【注意力机制】】 聚类 是针对 样本, 注意力机制是针对样本相关性,来进行计算的 自注意力机制 指的是 query ,key,value都是同一个部分。 可以学到 类似的 短语 ,和 语义特征。如its 指代的对象。 评论区大佬 根据这篇论文《Effective Approaches to…...

建议收藏,轻松搞懂区块链

未来已来&#xff0c;只是不均衡地分布在当下 大家好&#xff0c;我是菜农&#xff0c;欢迎来到我的频道。 本文共 5844字&#xff0c;预计阅读 30 分钟 区块链是近些年来最热门的前沿技术&#xff0c;被认为是未来十几年对金融、物联网、医疗等诸多领域产生最大影响的"…...

php设计一个新春祝福墙

记得十几年前的时候&#xff0c;每到春节&#xff0c;各大网站都会建一个祝福墙&#xff0c;上面挂满网友的新年寄语。这些年随着移动互联网的高速发展&#xff0c;web的新春祝福墙越来越少了。今天&#xff0c;咱们就来考考古&#xff0c;用快速原型法进行设计。原型设计采用M…...

KubeSphere 社区双周报 | OpenFunction 集成 WasmEdge | 2023.02.03-02.16

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者&#xff0c;并对近期重要的 PR 进行解析&#xff0c;同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为&#xff1a;2023.02.03-2023.…...

数字IC/FPGA 秋招知识点不全面整理

1. 引言 这篇文章的由来 秋招的时候,刚开始复习一些知识点的时候没有什么思路,只是盲目的看相关的书籍和资料,结果是留在脑子中的知识很有限,而且不够系统,在我需要它的时候,并不能很快的回忆起来。 于是就想着把一些典型的知识整理成一个文档,在进行刷题的时候可以比…...

你知道java8是如何排序Map嘛?

在Java中&#xff0c;有多种方法可以对Map进行排序&#xff0c;但是我们将重点介绍Java 8 Stream&#xff0c;这是实现目标的一种非常优雅的方法。 学习一下HashMap的merge()函数 在学习Map排序之前&#xff0c;有必要讲一下HashMap的merge()函数&#xff0c;该函数应用场景就…...