缓存机制的作用
1. 服务器异常,用户无法联网看到的内容
2. 节省用户的流量(例如:json 数据和图片数据,无需经常向服务器端请求数据)
3. 提高本地显示的响应速度
json 数据的缓存
我们常常从服务器端,获取 json 数据。可以把它存放在本地文件中,当再次需要时,先从本地判断是否存放;若有则直接使用,若无,则再次从服务器端获取。(json 数据占用内存不大,且不怎么耗费流量,一般不进行系统内存的存储)
json 数据的存储注意点
1. 存储的系统文件夹:cache 目录下(系统容易删除)或 SDCard 目录下(SD 卡损坏且数据丢失,不会有太大干扰)
2. 存放于 Andrid 的 SharedPreferences 中,通过键值对存取,需要使用时,再取出
json 数据的存储图
当首次从服务器端拿到数据,此时数据在 RAM 中,即内存中。此时保留一份到文件系统,存放到本地。
再次需要数据时,先判断存放在文件中的数据是否有,若有,则通过 key 获取。若无,则重新从服务器端获取。
json 数据的存取代码
public class SharedPrefUtil {
public static void saveJsonToCache(String key, String value, Context ctx) {
SharedPreferences sp = ctx.getSharedPreferences("Jsoncache",Context.MODE_PRIVATE);
SharedPreferences.Editor edit = sp.edit();
edit.putString(key,value);
edit.commit();
}
public static String getJsonFromCache(String key, Context ctx) {
SharedPreferences sp = ctx.getSharedPreferences("Jsoncache", Context.MODE_PRIVATE);
String jsonString = sp.getString(key, "");
return jsonString;
}
}
存放在SharedPreferences
中,手机shared_prefs
目录下的Jsoncache.xml
文件下,key 为 json 数据的 url。
图片的三级缓存机制
图片数据占用内存,且耗费流量。务必要使用三级缓存机制
三级缓存机制图示
首先,在手机屏幕上,ListView 在滑动,每个 item 中,有 ImageView(即显示图片的控件)让其显示图片
手机内存,手机本地文件系统和服务器端的数据称为三级缓存,一开始从服务器端拿数据显示时,存一份在内存缓存,也存一份在本地文件系统。下次再拿数据时,先从内存缓存判断,若没有,则从本地文件系统拿取(这里在本地文件中若是能够拿到,则存一份在内存缓存中);若还是没有,则从服务器中获取。
图片的三级缓存机制代码
MyBitmapUtils 类:
public class MyBitmapUtils {
private static final String TAG = "MyBitmapUtils";
public Activity mActivity;
public MyBitmapUtils(Activity mActivity) {
this.mActivity = mActivity;
}
// 从网络上获取图片,并显示在 imageView 上
public void display(ImageView iv,String imageUrl) {
// 先看看内存中的集合中是否有数据,若有,直接使用内存缓存
Bitmap bitmapFromMem = MemoryCacheUtils.getBitmapFromMem(imageUrl);
if(bitmapFromMem!=null) {
LogUtil.i(TAG,"使用内存缓存的数据!");
iv.setImageBitmap(bitmapFromMem);