那么,手机应用编程是如何入门的呢?
首先,有一点务必要清楚,你安装的手机应用开发工具是存储在智能手机内存中的。
点击一下开发环境的图标,操作系统就会知道你要启动这个软件,它会在手机的内存中找到你所安装的应用开发工具,将数据(安装的软件本质上就是数据的集合)复制到临时的工作区域。
对!
就是复制到临时工作区!
手机应用编程并不是直接在存储器中进行的,而是在临时工作区运行的。
为什么呢?
因为临时工作区的读写速度比存储器的速度快很多。
对于读写速度,临时工作区 > 存储器。
存储器是靠机械装置带动盘片转动来读写数据的,而临时工作区通过电子信号来读写数据,机械装置的转速肯定没有电子信号的传输速度(几乎是光速)快。
虽然存储器也是通过电子信号来读写数据,但是因为与临时工作区的控制方式不一样,速度也不及临时工作区。
所以,不管是编写一个简单的算数应用还是制作复杂的社会媒体程序,都是先将手机中的数据复制到临时工作区,才能让处理器进行处理,这个过程就叫做“临时加载”。
完成这个过程需要一个特定的机制(软件),这个机制就被称作程序调度器。
处理器直接与临时工作区打交道,它会读取临时工作区中的数据进行处理,并将结果保存回临时工作区。
如果需要将结果保存到存储器,才会将临时工作区中的数据复制到存储器。
例如,编写一个计算器的应用,输入一些运算式,虽然我们看到的不一样了,但是存储器中的代码没有改变,新增的运算逻辑暂时保存在临时工作区,点击“运行”才会保存到存储器。
因为临时工作区的空间是有限的,所以如果你在编程过程中忘记保存就关闭应用了,那么你将永远无法找回这些内容。
虚拟机
如果我们运行的程序较多,占用的空间就会超过临时工作区的容量。
例如手机内存容量为8G,却同时运行着5个应用,这5个应用共占用6G的空间,也就意味着需要从存储器复制6G的数据到临时工作区,这显然是不可能的。
操作系统(Operating System,简称 OS)为我们解决了这个问题:当程序运行需要的空间大于临时工作区容量时,会自动将一些不常用的数据移回存储器;
当我们再次调用这些数据时,再将它们从存储器中读入临时工作区。
这样,存储器中就会有一部分空间用来存放临时工作区中暂时不用的数据。
这一部分空间就被称为“虚拟机”(Virtual Machine)。
8G – 6G = 2G,上述例子就需要在存储器上分配2G的虚拟机空间。
当然,这样的交换速度比起临时工作区来说慢很多,重复交换数据会消耗很多时间,所以如果你的手机内存太小,会严重影响手机的运行速度,甚至会出现“卡死”现象,即使处理器再强大,也不会有太多的改观。
如果经济条件允许,建议将手机内存升级为16G,在目前流行的操作系统下运行应用就会比较流畅了。
总结:处理器直接从临时工作区中读取数据,处理完成后将结果再写入临时工作区。
图1:处理器、临时工作区、存储器和主板的关系
二、数据在临时工作区的存储方式
手机要处理的信息同样是多种多样的,如十进制数、文字、符号、图形视频等,这些信息在用户的视角来看是不同的。
但对于手机来说,它们在临时工作区都是一样的,都是以二进制的形态存在的。
要想学习手机应用编程,就必须了解二进制,它是手机数据处理的基础。
处理器是非常精密的部件,包含了上亿个电子元器件,它们非常小,达到了纳米级别。
这些元器件实际上就是电路;电路的电流会变化,要么是电流流动(通电),要么是没有电流流动(断电),只有这两种状态。
电流流动用1表示,没有电流流动用0表示。
所以,一个电路元件有2种状态,或者说是2进制状态。
我们通过控制电源给这些电路元件供电或断电,可以组成很多不同的组合。
例如,8个电路元件可以有2^8 = 256种不同的组合,16个电路元件可以组成2^16 = 65536种不同的组合。
即使一个电路元件只能表示0和1两种状态,但是多个结合起来就可以表示更多种的状态了。
我们可以给每一种组合赋予特定的含义,比如用00000001、10101010、10000000…来代表A、B、C……等英文字母。
那么结合起来00111011就表示“A程序”。
一般情况下,我们不会一个一个的控制电路元件的供电和断电状态,而是将8个电路元件看做一个单位,即使表示很小的数,比如1,也需要8位,也就是1字节。
1个电路元件称为1比特(Bit)或1位,8个电路元件称为1字节(Byte),16个电路元件就是2字节,以此类推:816=256个电路元件就是2^8=256字节,简写为1KB;81616=4096字节就是1MB;8161616=65536字节就是1GB。
现在,你知道1GB的手机的临时工作区有多少个电路元件了吧。
我们通常所说的应用大小是多大KB、多大MB,就是这个意思。
单位换算:2Bit=1Byte、256Bit=1KB。
看,在手机临时工作区中并没有A这样的字母,也没有jpg这样的图片格式,只有0和1两个数字,手机也只认识和0、1。
所以,手机使用二进制,而不是我们熟悉的十进制,写入临时工作区的数据,都会被转换成0、1的组合。
三、SCII与Unicode编码
这是经常容易混淆的一个点。
SCII码我们知道,一个比特有0、1两种状态,一个字节有8个比特,有256种状态,每种状态对应一个符号,就是256个符号。
计算机诞生于美国,早期的程序大多使用英文,上世纪60年代,美国制定了一套英文字符与二进制的对应关系,称为SCII码,沿用至今。
SCII码规定了94个英文字符及一些特殊字符与二进制位的对应关系,占用1个字节(实际上只占用了字节的7位,最前面的1位统一规定为0)。
例如,字母a的SCII码为00010001,那么你暂时可以理解为字母a存储到手机临时工作区之前会被转换为10100000,读取时遇到10100000也会转换为a。
www.asciima.com
Unicode编码
随着计算机的普及,使用计算机的人越来越多,不仅限于英语国家,整个世界都在使用计算机,这个时候SCII编码就显露出问题来了。
SCII编码只能表示128个字符,而我们通常使用的字母、数字、标点符号等就已经超过这个范围了,特别是对于非英文的使用者来说,如何表示中文字符、日文字符等等就成了问题。
所以,上世纪90年代,国际上制定了一套新的字符编码标准,将全世界的所有字符统一使用一种方式在计算机中以二进制形式表示,这就是Unicode编码(Unique Code),也称统一码、万国码。
Unicode是一个很大的集合,现在的规模可以容纳1万多个符号,每个符号有一个唯一的二进制编码。
Unicode编码规定,可以使用1个字节或者多个字节来表示一个字符,比如英文字母通常只需要1个字节,但是中文字符就需要3个字节。
为了兼容SCII码,Unicode编码规定前128个字符与SCII码是一样的,不一样的只是超过这一范围的字符。
chinateacher.org/Tools/Unicode.aspx
完整的Unicode编码请查看:nicode.org
摘抄的过程也是学习记录笔记的过程,大家共同学习,谨记:不会编程就是文盲。
(关注我)。
关注后,手机客户端点击我的主页面,右上角有私信,请私信发我:“编程电脑已经设置好了关键词自动回复,自动领取就
可以了!”
这几天上万个消息,真的回复不过来,所以回复的时候请注意关键词!
其实做为一个开发者,有一个学习的氛围跟一个交流圈子特别重要这里请私信我“编程”不管你是小白还是大牛欢迎入住一起