硅谷新闻9--图片三级缓存

Posted 安卓笔记侠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了硅谷新闻9--图片三级缓存相关的知识,希望对你有一定的参考价值。

1.三级缓存设计步骤:

* 从内存中取图片
* 从本地文件中取图片
   向内存中保持一份
* 请求网络图片,获取图片,显示到控件上
* 向内存存一份
* 向本地文件中存一份

2.网络缓存

线程池类Executors的使用

public static ExecutorService newCachedThreadPool()

创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。对于执行很多短期异步任务的程序而言,这些线程池通常可提高程序性能。调用 execute 将重用以前构造的线程(如果线程可用)。如果现有线程没有可用的,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟未被使用的线程。因此,长时间保持空闲的线程池不会使用任何资源。注意,可以使用 ThreadPoolExecutor 构造方法创建具有类似属性但细节不同(例如超时参数)的线程池。

public static ExecutorService newFixedThreadPool(int nThreads)

创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。在任意点,在大多数 nThreads 线程会处于处理任务的活动状态。如果在所有线程处于活动状态时提交附加任务,则在有可用线程之前,附加任务将在队列中等待。如果在关闭前的执行期间由于失败而导致任何线程终止,那么一个新线程将代替它执行后续的任务(如果需要)。在某个线程被显式地关闭之前,池中的线程将一直存在。

3.本地缓存

File file = new File(CACHE_DIR, fileName);  FileInputStream FileOutputStream 文件读写方式

演示把图片移除后,在查看
C:\Users\Administrator>adb shell
# cd /mnt/sdcard/atguigu_beijingnews
cd /mnt/sdcard/atguigu_beijingnews
# rm *
rm *

4.内存缓存

引用级别

我们经常会使用一种非常流行的内存缓存技术的实现,即软引用或弱引用 (SoftReference or WeakReference)。
但是现在已经不再推荐使用这种方式了,因为从 android 2.3 (API Level 9)开始,垃圾回收器会更倾向于回收持有软引用或弱引用的对象;

另外,Android 3.0 (API Level 11)中,图片的数据会存储在本地的内存当中,因而无法用一种可预见的方式将其释放,

这就有潜在的风险造成应用程序的内存溢出并崩溃。所以看到还有很多相关文章还在推荐用软引用或弱引用 (SoftReference or WeakReference),就有点out了

 

Android3.0后提出新的方式
LruCache 缓存的集合,把常用的数据,保留起来,把不常用的给回收。
Lru近期最少使用算法

以上是关于硅谷新闻9--图片三级缓存的主要内容,如果未能解决你的问题,请参考以下文章

硅谷新闻11--极光推送的集成

硅谷新闻2--禁止viewpager预加载

硅谷新闻5--顶部新闻轮播图事件处理

硅谷新闻1--引导界面GuideActivity

国际新闻|IvorySQL将在美国硅谷Postgres会议亮相

硅谷新闻8--TabLayout替换ViewPagerIndicator