Android 缓存机制的原理解析与运用

缓存机制的作用

1. 服务器异常,用户无法联网看到的内容
2. 节省用户的流量(例如:json 数据和图片数据,无需经常向服务器端请求数据)
3. 提高本地显示的响应速度

json 数据的缓存

我们常常从服务器端,获取 json 数据。可以把它存放在本地文件中,当再次需要时,先从本地判断是否存放;若有则直接使用,若无,则再次从服务器端获取。(json 数据占用内存不大,且不怎么耗费流量,一般不进行系统内存的存储)

json 数据的存储注意点
1. 存储的系统文件夹:cache 目录下(系统容易删除)或 SDCard 目录下(SD 卡损坏且数据丢失,不会有太大干扰)
2. 存放于 Andrid 的 SharedPreferences 中,通过键值对存取,需要使用时,再取出
json 数据的存储图

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);
            
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值