您的位置:首页 > 移动开发 > Android开发

Android中的储存

2016-05-28 18:35 246 查看
说到android中的储存就不得不说一下android平台上的一个轻量级的储存类:Sharepreference。

{他使用键值对的方式来保存应用的一些常用的配置}保存路径:data/data/包名/shared_pres

内部储存保存在上下文中:data/data/包名/目录。是可持久化的!

接着就是内部缓存和内部文件储存:缓存{cache} 路径:data/data/包名/cache; 文件储存:data/data/包名/files

Android是基于包管理应用的如果应用被卸载那么其包以及包内的多有内容讲义气被删除。这就是内部储存;

file和cache的区别

1.点击清除缓存cache将会被删除;

2.点击清除数据,内存中的所有数据都会被清除包括cache, files,Sharepreference;

3.内部储存的缺点是:当内部储存文件过大时会影响程序的运行;所以要是不是的清理缓存

4.优点:应用被卸载是所有和他有关的数据都会被清理;

相应的有内部储存 就会有外部储存! 外部储存就是指的在SD卡上进行储存,首先要在配置清单中进行权限声明也就是{<uses - permission android:name = " android . permission . WRITE_EXTERNAL_STORAGE"/>   和 

<uses - permission android:name = " android . permission . READ_EXTERNAL_STORAGE"/>   }读取外部储存的权限和写入外部储存的权限。

SD卡的状态判断以及其好处:

SD卡的状态判断:Environment.getExternallStorageState().equals( Environment.MEDIA_MOUNTED);

其好处就是:不占用应用的内部储存,使应用运行良好,缺点是卸载后数据不会消失。

我们可以使用外部缓存:getExternalCacheDir(); 得到的就是外部缓存的路径,该路径不用应用的内部存储,并且卸载应用后相应的数据也会一起清除,因此推荐使用!!


三级缓存:{重点在于Lrucache}

在ImageLoader涉及到了三级缓存,第一级缓存是Lrucaceh。当你使用Lrucache的时候需要重写Sizeof()方法,Lrucache的构造方法 是:new 了一个hashMap 存放图片和图片的名字,it is moved to the head of the queue  如果缓存中的bitmap被访问到的话就将这张图片放到队列中的最前面,也就是最常使用的。首先从hashMap中通过key读取bitmap,如果bitmap尊在的话,hit
Count ++ {进行被访问的次数累加}并将比他们怕返回。否则miss Count ++ {进行没有被访问的次数累加} 如果hit Count最多的话就应该放在队列的最前面。

size += safeSizeof(key, value);将bitmap的size添加给size。

判断map中之前存不存在这张图片,如果存在的话size再捡回去;当图片添加进去之后,首先判断size是否大于maxsize,如果大于的话,应该讲hashmap中最常用的bitmap移除掉(之后循环判断)小于maxsize直接结束。

归置归置上面的话其实就是:先把图片存放到map中之后判断当前的图片的size是否大于maxsize,如果不大于的话直接结束,大于的话将最常用的移除掉,如果移除后还是大于maxsize的话继续将其他不常用的给删除掉。

那么怎么判断一个bitmap是最不常用的呢? : 是通过访问的次数如果访问次数最少那么就是不常用的,将其放到队列的尾部,如果是最常用的就放在头部。

剩下就是第二级缓存{本地读取}和第三季缓存{网络获取}了;

感谢亲临,欢迎指评。多提意见!!!




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息