`
bolutes
  • 浏览: 871200 次
文章分类
社区版块
存档分类
最新评论

Android Jamendo开源在线音乐播放器源码分析七 数据缓存和图片缓存的分析

 
阅读更多

在醒目中对于进行数据缓存和图片缓存的对象是在public class JamendoApplication extends Application这个Application里面进行创建和获取的。

对于Application先看一下API中的解释

Class Overview

Base class for those who need to maintain global application state. You can provide your own implementation by specifying its name in your AndroidManifest.xml's <application> tag, which will cause that class to be instantiated for you when the process for your application/package is created.

There is normally no need to subclass Application. In most situation, static singletons can provide the same functionality in a more modular way. If your singleton needs a global context (for example to register broadcast receivers), the function to retrieve it can be given aContextwhich internally usesContext.getApplicationContext()when first constructing the singleton.

对于数据的缓存是通过一个类RequestCache来处理的

将已经下载的最近10个数据放到一个HashTable<String,String>里面,如果HashTable里面有那么直接取出来,如果没有则加入,如果HashTable里面的数据超过了10个那个就把最晚的那个删除。

在HomeActivity里面有一个NewsTask的AsyncTask用以加载最近一个星期内最受欢迎的专辑

会调用JamendoGet2ApiImpl里面想用的方法

这里面会调用Caller里面的doGet()方法


可以看出如果存放缓存的requestCache不是null,而且根据要取的url作为key从HashTable里面取出的的数据不是null,那么久可以直接取出缓存的数据,否则就要从网络获取,从网络获取后将其加入到缓存中


对于图片的缓存是通过ImageCache来处理的

在PlayerActivity里面显示图片的空间不是直接用的ImageView而是RemoteImageView这个继承了ImageView的空间来处理的,在设置图片的时候是mCoverImageView.setImageUrl(playlistEntry.getAlbum().getImage().replaceAll("1.100.jpg", mBetterRes));是将在服务器上的地址传过来的

如果ImageCache里面有则直接从缓存里面取出,如果没有启动一个异步任务进行加载。如果在启动的异步任务里面加载完了图片则将他加入到缓存中

JamendoApplication.getInstance().getImageCache().put(mTaskUrl, bmp);



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics