三级缓存

本文介绍了如何使用三级缓存策略来优化图片显示。首先检查内存中是否存在图片,如果存在则直接显示;其次查找SD卡,若找到则加载到内存并显示;最后,若网络存在图片,则下载到SD卡并加载。同时,给出了ListView中实现这一策略的代码框架,包括多个关键类的使用。
摘要由CSDN通过智能技术生成
1、三级缓存是指:网络、 内存、 SD卡三级;

    展示一张图片
    1、先判断内存里是否有该图片,
    如果有,显示。如果没有,进入第二步
    2、判断SD卡中是否有该图片,如果有,
    加载到内存中,显示,如果没有,进入第三步
    3、从网络下载该图片到sd卡中,并且加载到内存中。然后显示。

2、利用三级缓存来实现一个listView的图片展示,代码如下:

实现的原理如图所示:

MainActivity:

public class MainActivity extends AppCompatActivity {
    ListView listvew;
    ArrayList<String> urlList;
    ShowImageAdapter2 showImageAdapter2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listvew = (ListView) findViewById(R.id.listvew);
        initList();

        showImageAdapter2 = new ShowImageAdapter2(urlList, this);
        listvew.setAdapter(showImageAdapter2);
    }

    private void initList() {
        urlList = new ArrayList<>();
        for (int i = 1; i < 200; i++){
            String url = "http://img2.3lian.com/2014/f4/100/d/" + i + ".jpg";
            urlList.add(url);
        }
    }
}
 

ShowImageAdapter2:

public class ShowImageAdapter2 extends BaseAdapter {
    ArrayList<String> list;
    LayoutInflater layoutInflater;
    Context context;
    public ShowImageAdapter2(ArrayList<String> list, Context context) {
        this.list = list;
        this.context = context;
        layoutInflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public String getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //每次Item的展示都需要实例化viewHolder或者从服用的convertView中取出实例化好的ViewHolder
        ViewHolder viewHolder = null;
        if (convertView == null){
            convertView = layoutInflater.inflate(R.layout.item_imagview, null);
            viewHolder = new ViewHolder();
            viewHolder.imageView = (ImageView) convertView.findViewById(R.id.imageview);
            convertView.setTag(viewHolder);
        }else {
            viewH
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值