android 的内存、内部存储和外部存储的理解/cache/system。

最近在看android多媒体的书,牵扯出这个东西来。

参考文章:

http://blog.csdn.net/androidwifi/article/details/17725989/

http://www.androidchina.net/4106.html

http://lixiangyu.iteye.com/blog/1455325

android 手机有内部存储和外部存储,这两个东西是比较容易混淆的。那么这两个东西是什么鬼呢。

首先:我们要先了解相对路径和绝对路径。

绝对路径:绝对路径是指书写文件的完整路径(比较好理解),如d:\test\java\helloword.java,在该路径下包含文件的完整路径d:\test\java\以及文件名helloword.java,

使用该路径可以唯一的找到一个文件,不会产生歧义,但是使用绝度路径表示文件时有很大的局限性,不能再不同的操作系统下运行,因为不同的操作

系统对文件路径的表示方式可能是不同的。


相对路径:相对路径并不是一个完整的路径(注意“相对”二字,说明得有一个参照物),是指书写文件的部分路径,如\test\java\helloworld.java,该路径只包含文件的部分路径\test\java和文件全名helloworld.java,部分路径是指当前路径下的子路径,此时为此相对路径的父路径时d:\,所以完成路径是d:\test\java\helloworld.java,如果换成e盘,完整路

径就是e:\.....,可以看出,你并不知道这个文件在哪个盘,那么神奇的地方是怎样根据这个残缺的路径找到文件,当然,相对路径的父路径是谁,他就指向父路径下此相对路径的

文件,可以看出是必须有一个参照物,即父路径,是相对于父路径的路径。完整应该是父路径\相对路径\文件名如果你换了父路径,而换了的父路径并没有这个相对路径和文件

就有可能报null,可以看出相对路径时的灵活性非常强。我们平时代码中大多数用到的也是相对路径,或相对url(关于url请移步),毕竟名字太长并不是容易记得住的。


虽然在大多数情况下我们用到的时相对路径,但在Android中,我们大多数情况下用的却是绝对路径,那么,这是为什么呢。

原因:普通的java项目创建于服务器(pc也可以看做服务器127.0.0.1)而运行于服务器,所以父目录(即相对路径参照物)就是相对路径的参照物,所以在自己的服务器可以操纵自己的文件目录而不会出现null的问题。

    而Android项目创建于电脑而运行与手机,项目的参照物是电脑下的项目路径,但在换到手机上相对路径的参照物还是电脑,所以这是就会报null的错误,这就是Android必须是绝对路径的原因。


下面开始内存 内部存储空间和外部存储空间的分析。

存储器:计算机结构中的一个重要的部分,通常分为两种,主存储器和辅助存储器。主存储器又称内存储器(简称内存),辅助存储器一般就是外部存储器,如电脑的硬盘等。

内存储器只是暂时存放数据的地方,比如打开一个word文档,敲入一个文字,他会立即保存在内存储器上,当选择存放到磁盘时,它才会存储到辅助存储器上(外部存储器)

,当运行一个游戏时,此游戏所运行的数据是在内存储器上来运算的。当然,这一切都由CPU调度,下面对内存的解释更为贴切。


内存:计算机中的重要部件,是计算机与CPU共同的桥梁,计算机中所有的程序都 运行在内存上。 内存(Memory)也被称为 内存储器,其作用是用于暂时存放CPU中的运算数据,以及与 硬盘等 外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到 内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行。 内存是由 内存芯片、电路板、 金手指等部分组成的。(百度百科)相对于普通用户内存储器是不可见的,而外存储器是可见的,如硬盘,U盘等。


上面是在计算机中的理解,那么在Android设备上又是怎么一回事呢。

首先有这样三种存储器的定义,RAM,ROM,SD。

内存 ———物理位置是位于手机内部的随机存储器上,就是俗称的RAM。就是计算机上对内存储器的理解啦。

内部存储
系统存储├─物理位置是位于手机内部的非易失性存储器上,就是俗称的ROM(机身内存),他们三个分别位于不同的分区上,
系统缓存

一般人无法更改如 w cde盘一样。

SD卡:内存卡。就是我们插入手机中的内存卡。
ROM相当于电脑硬盘,断电后依然能够保存资料。
RAM相当于电脑内存,断电后资料丢失。

误区迷惑:

其实android手机的ROM和SD扩展卡都相当于电脑的辅助存储器,而RAM相当于主存储器(内存储器,简称内存)。

需要注意的是,Android时基于Linux的,Windows用户一定不要以Windows的角度理解,当然,这是一句废话。

而在android手机中,辅助存储器中又分为内部存储和外部存储(这是楼主的理解),当然,还有系统存储和系统缓存或其他部分,也就是我们下面所要解释的概念。

还有一个容易迷惑的地方是,只有一个内存卡,也就是插入手机中的内存卡,怎么会有sd0和sd1呢。如果sd1是你插入手机中的内存卡的话。

sd0其实是从ROM(机身内存)中分离出来的一个区,作为外部存储即内置内存卡(用户可见部分),为sd0,是不是很坑,很容易和内部存储搞混。ROM中的内部存储、

系统存储、系统缓存依然不可见。

另一点,既然时ROM,外部存储,SD1并不在ROM中,为什么还能读出来,其实是通过"/mnt"这一节点将外部存储挂载上去的。


内部存储:上面介绍了内部存储是辅助存储器(ROM机身内存)的一部分,RAM为主存储器(简称内存,内存储器,系统运存,易失性存储器),那么这个内部存储在

ROM(机身内存)什么地方,又有什么作用呢,还有系统存储和和系统存储又是什么鬼。

首先打开DDMS,然后打开File Explore,就可以看到一个目录结构,具体请移步,我们这里仅介绍内部存储。

首先看到的都位于系统根目录(Linux)下,物理位置ROM(机身内存)。我们会看到一个data文件夹,如果有Root权限的话可以打开。

注意,下面的“/”时系统根目录。

内部存储所指的就是 “/data”这个文件夹,对于普通用户是不可见的,那它的作用是什么呢。我们一般的应用程序都是安装在这个分区下的,每当这个分区出现

内存不足时(装满啦),就不能再安装其他应用,当然,有些应用是可以移至SD卡的(如QQ,微信),我们可以在手机设置里面看到,这样你就可以多装一些应用,但有些程序是不可以的。

当我们打开“/data”这个文件夹后,可以看到有很多的文件夹,值得注意的是一个app的文件夹和一个data的文件夹。


                 android 的内存、内部存储和外部存储的理解/cache/system。_第1张图片

app:我们可以看到有两类文件.apk 和 .odex,其实我们安装的软件都存放在这个/data/app/文件夹下 (直接以单个apk文件形式存放)。那odex文件又是什么呢,他是apk中提取出来的可运行文件。

data:我们可以看到有很多包,存放应用程序数据用的,我们平时的密码、程序的运行垃圾什么的都存放在这里,我们在手机设置里的应用管理点击应用,可以看到这个功能,即清除数据。其实就是清的这个文件夹下对应程序包的数据,他的存放形式是以数据库的形式,我们可以看到我们程序中使用 SharedPreference和SQLite存放的数据。


系统存储:"/system"文件夹,存放一些系统文件,如“/system/app”,存放系统的app,如相册,相机等。

系统缓存:"/cache"文件夹,android系统运行时的缓存垃圾会放在这里。

外部存储:SD0或SD1你可以在/mnt下看到,也可以在/storage,他是通过/mnt节点挂载上去的,外部存储是可以被用户和其他应用程序访问的,可以被肉眼可见的,如sd卡,而我们编写的普通的Android项目只要访问外部存储空间就可以完成相应的需求,关于灵活的运用外部存储请移步

关于File Explore下文件夹的详细介绍,请移步。。。。

最后,无论是ROM ,RAM,他们都是由CPU统一调度的。






你可能感兴趣的:(Android,开发之路(初见Android))