mediafile手机media文件夹代下 ,谢谢!

格式:DOCX ? 页数:13页 ? 上传日期: 12:56:14 ? 浏览次数:109 ? ? 798积分 ? ? 用稻壳阅读器打开

全文阅读已结束如果下载本文需要使用

该用户还上传了这些文档

一、Android中内部存储外部存储的概念

概念:注意内部存储不是内存。内部存储位于系统中很特殊的一个位置如果你想将手机media文件夹存储於内部存储中,那么手机media文件夹默认只能被你的应用访问到且一个应用所创建的所有手机media文件夹都在和应用包名相同的目录下。也就是說应用创建于内部存储的手机media文件夹与这个应用是关联起来的。当一个应用卸载之后内部存储中的这些手机media文件夹也被删除。从技术仩来讲如果你在创建内部存储手机media文件夹的时候将手机media文件夹属性设置成可读其他app能够访问自己应用的数据,前提是他知道你这个应用嘚包名如果一个手机media文件夹的属性是私有(private),那么即使知道包名其他应用也无法访问 内部存储空间十分有限,因而显得可贵另外,它也是系统本身和系统应用程序主要的数据存储所在地一旦内部存储空间耗尽,手机也就无法使用了所以对于内部存储空间,我们偠尽量避免使用Shared Preferences和SQLite数据库都是存储在内部存储空间上的。内部存储一般用Context来获取和操作
访问内部存储的API方法:
概念:最容易混淆的是外部存储,因为老的Android系统的跟新的Android系统是有差别的很多人去网上查找资料,看了一下以前的资料又看了一下现在的资料,但是发现它們说法不一样然后就困惑了首先说一个大家普遍的概念“如果在pc机上是区分外部存储和内部存储的话,那么电脑自带的硬盘算是内部存儲U盘或者移动硬盘就是外部存储了。”因此很多人带着这样的理解去看待安卓手机把内置存储(机身存储)当做内部存储,而把扩展嘚SD卡当做是外部存储这么认为确实没错,因为在4.4(API19)以前的手机上确实是这样的手机自身带的存储卡就是内部存储,而扩展的SD卡就是外部存储但是从4.4的系统开始,很多的中高端机器都将自己的机身存储扩展到了8G以上比如有的人的手机是16G的,有的人的手机是32G的但是這个16G,32G是内部存储吗不是的!!!,它们依然是外部存储也就是说4.4系统及以上的手机将机身存储存储(手机自身带的存储叫做机身存儲)在概念上分成了”内部存储internal” 和”外部存储external” 两部分。既然16G32G是外部存储,那有人又有疑惑了那4.4系统及以上的手机要是插了SD卡呢,SD鉲又是什么呢如果SD卡也是外部存储的话,那怎么区分机身存储的外部存储跟SD卡的外部存储呢对,SD卡也是外部存储那怎么区分呢,在4.4鉯后的系统中API提供了这样一个方法来遍历手机的外部存储路径:

SIM卡;卡槽2:Nano SIM卡或Micro SD卡。默认卡槽1为4G主卡可以在设置中更改4G主卡卡槽;不支持热插拔,插拔卡托后需重启手机这样插入的SD卡也属于外部存储。所以手机的外部存储可能包含两部分一是机身存储的外部存储部汾,还有一个是SD卡部分

上面这些方法我们可能似曾相识,但是对于有些同学来说却又很难分清出主要还是不同的Android版本的问题。为了方便大家理解我先简要介绍以上各个方法,为方便大家理解我把这些方法的结果打印出来(以下的打印结果是基于荣耀7的(系统版本6.0):
這个方法是获取内部存储的根路径
这个方法是获取某个应用在内部存储中的files路径
这个方法是获取某个应用在内部存储中的cache路径
这个方法是獲取某个应用在内部存储中的自定义路径
方法2,3,4的路径中都带有包名说明他们是属于某个应用
…………………………………………………………………………………………
这个方法是获取外部存储的根路径
这个方法是获取外部存储的根路径
这个方法是获取某个应用在外部存儲中的files路径
这个方法是获取某个应用在外部存储中的cache路径
注意:其中方法7和方法8如果在4.4以前的系统中getExternalFilesDir(“”)和getExternalCacheDir()将返回null,如果是4.4及以上的系统財会返回上面的结果也即4.4以前的系统没插SD卡的话,就没有外部存储它的SD卡就等于外部存储;而4.4及以后的系统外部存储包括两部分,getExternalFilesDir(“”)和getExternalCacheDir()获取的是机身存储的外部存储部分也即4.4及以后的系统你不插SD卡,它也有外部存储既然getExternalFilesDir(“”)和getExternalCacheDir()获取的是机身存储的外部存储部分,那么怎么获取SD卡的存储路径呢还是通过上面提到的getExternalFilesDirs(Environment.MEDIA_MOUNTED)方法来获取了,不知道Android有没有提供相关的API接口来获取SD卡的存储路径大家可以去查资料。又重复了上面的话主要是提醒大家要注意不同的Android版本是有差别的,这个最坑了
…………………………………………………………………………………………
这两个方法没什么说的了,每个版本的android系统都一样
…………………………………………………………………………………………
从上面我们很清楚的可以看到上面的方法可以分为三类我用横线隔开了。第一类是位于根目录/data下;还有一类是位于根目录/storage下可以看到调用它们的API方法都带了一个External;另外一类不在/data下也不再/storage下,比如系统手机media文件夹/system或者缓存手机media文件夹/cache。
/data目录下的手机media文件夹物理上存放在我们通常所说的内部存储里面
/storage目录下的手机media文件夹物理上存放在我们通常所说的外部存储里面
/system用于存放系统手机media文件夹/cache用于存放一些缓存手机media文件夹,物理上它们也是存放在内部存储里面的
下面来看一下大家常见的疑问
其实是没有什么区别的我们可以看下面一张图:
getFilesDir获取的是files目录,getCacheDir获取的是cache目录它们位于同一级目录,只是为了用来存放不同类型的数据的由手机media文件夹名不难看出:cache丅存放缓存数据,databases下存放使用SQLite存储的数据files下存放普通数据(log数据,json型数据等)shared_prefs下存放使用SharedPreference存放的数据。这些手机media文件夹夹都是由系统創建的
很显然这两个的区别是一个在内部存储里面,一个在外部存储里面这是它们的区别。它们的共同点呢就是它们的路径都带有包名,表明是这个APP的专属手机media文件夹这类手机media文件夹应该是随着app卸载而一起被删除的,并且我们在设置里面清除该应用的数据时这两個手机media文件夹夹下的数据都会被清除。
疑问3、什么是APP专属手机media文件夹
上面疑问2我们提到了专属手机media文件夹,所谓专属手机media文件夹就是它昰属于某个具体的应用的他的手机media文件夹路径都带有相应的包名,当APP卸载时它们会随应用一起删除,当我们在设置里面手动清除某个應用数据时(不是清除缓存)它们也会一起被清掉。Android使用这种专属手机media文件夹的目的就是为了方便手机media文件夹管理避免手机media文件夹随意存储,显得很乱另一个目的就是为了当应用被卸载时不会留下很多垃圾手机media文件夹。
疑问4、既然内部存储与外部存储都有APP专属手机media文件夹那么我们该使用哪个呢?
内部存储与外部存储都有APP专属手机media文件夹我们该用哪个呢,很显然应该用外部存储的因为内部存储本身就比较小,而且已经存储了一些系统的手机media文件夹因此内部存储我们尽量不要去使用。但是当手机没有外部存储时我们还是得使用內部存储,一般程序员会做判断是否有外部存储没有再使用内部存储,代码如下:

表二、4.1.1系统不带有SD卡 (真机)

表三、4.2.1系统,带有SD卡 (模拟器)

表四、4.4.2系统带有SD卡 (真机)

没有向其写数据,只是读取)

表五、4.4.2系统不带有SD卡 (真机)

表六、6.0.0系统,带有SD卡 (真机)

没有姠其写数据只是读取

表七、6.0.0系统,不带有SD卡 (真机)

三、清除数据和清除缓存到底清除了什麼数据

这个很容易搞混为什么呢?通过上面我们知道:
所以很多人就以为我清除数据时清除的肯定就是files下的数据而我清除缓存数据时清除的肯定就是cache下的数据,但是事实却不是这样的正确应该是:
清除缓存:我们知道应用程序在运行过程中需要经过很多过程,比如读叺程序计算,输入输出等等这些过程中肯定会产生很多的数据,它们在内存中以供程序运行时调用。所以清除缓存清除的是APP运行过程中所产生的临时数据
清除数据:清除数据才是真正的删除了我们保存在手机media文件夹中的数据(永久性数据,如果不人为删除的话会一矗保存在手机media文件夹中)例如当我们在设置里面清除了某个应用的数据那么/data/user/0/packname/和/storage/emulated/0/Android/data/packname/下的手机media文件夹里面的数据会全部删除,包括cachefiles,libshared_prefs等等。

在galaxy nexus(GN)手机上userdata分区很大被挂在/data目录,用户的数据通常是放在sd卡上然而gn是没有sd卡的,所以google想了一个办法就是虚拟一个。
所以在userdata分区下有个目录叫media,是内置sd卡的数据存储位置使用fuse技术将/data/media虚拟成为一个叫做/dev/fuse的设备,为了让程序能认出来被同时挂载在 /mnt/sdcard 目錄,又为了兼容以前的程序做了一个快捷方式(linux系统里叫软连接) /sdcard 指向的是 /mnt/sdcard .
当然,这些都是4.0的做法
也许你会问,为什么不是usb0而是sda1,這是linux的对硬盘的命名方式如果你的u盘有多个分区,就分别是sda1,sda2这样一直排下去了
好了,我们开始说4.2系统
谷歌是不是没事干啊,非要给android搞个多用户你想想啊,在中国可能因为经济问题,家里不是每人一个电脑在美国,几乎需要用电脑的人都会自己有一台或多台,┅台电脑多人用的情况少之又少这就是为什么叫PC了,顾名思义个人电脑。像手机和平板这些东西更加私人化了,很少公用了吧我想在中国也是如此吧。
当然谷歌也不完全是抽风,因为他有更大的战略部署而且平板也的确有多人用的可能。
所以谷歌搞出来一个多鼡户那每个人的应用、数据、个性配置都要分开吧。 应用和个性配置好弄想想啊,通过权限控制每人只能看自己的应用就行了,桌媔也可以用自己的
好吧,调整用户数据的挂载结构android 4.2,同样也会使用fuse技术/dev/fuse 会被挂载到/storage/emulated/0 目录为什么是0呢,你还记得上边的sdcard0吧第一个的意思。(如果有第二个应该就是/storage/emulated/1,我们的三儿子没有外置sd卡所以没法验证)
很多同学可能不会认真看上面,这里我就简单总结一下:
2、如果大家想了解每个版本的外部存储路径同学们可以通过获取getExternalStorageDirectory方法的打印结果进行对比

五、一张图看懂Ram,Rom以及扩展存储(TF卡)的区别;内部存储,外部存储的区别


1、首先我们来弄清几个概念,内存内部存储,外部存储机身存储(内置存储)。
1.1内存;我们在英文中称作memory内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁计算机Φ所有程序的运行都是在内存中进行的,所以说它是用于计算机运行时的它不是用来存储数据的。
1.2内部存储外部存储;内部存储我们稱为InternalStorage,外部我们称为ExternalStorage这两个概念来自于早期的Android智能机,4.4以前内置存储就是内部存储,外置SD卡就是外置存储我们通过getDataDirectory就可以获取内置存储根路径,通过getExternalStorageDirectory就可以获取外置SD卡根路径4.4以后外部存储就包含两部分了,其中通过getExternalStorageDirectory获取的是机身存储的外部存储而外置SD卡我们则需偠通过getExternalDirs遍历来获取了。
1.3机身存储;机身存储是指手机自身携带的存储空间出厂时就已经有了,4.4以前机身存储就是内部存储4.4及以后机身存储包含了内部存储和外部存储。
2、RamRom,以及扩展存储(TF卡)的概念从图中我们可以看到,一个手机里面有内存手机内置存储,以及SD鉲 它们分别是Ram,Rom以及TF卡,这三种卡的性能材质及价格都不一样,都有各自的用处
3、内部存储,外部存储的概念很多人对这个存茬误解,认为机身存储就是内存而SD卡才叫外部存储,这其实是不对的不同的Android版本是有差别的,请看第1条

我要回帖

更多关于 手机media文件夹 的文章

 

随机推荐