如何实现二级缓存,有很多技术方案,在这里我们使用 ASimpleCache框架来给大家演示一下,通过名字就可以看出它是很容易实现的。
1、ACache介绍 ASimpleCache是一个轻量级的开源cache框架,实际上就是一个叫ACache的java类。已经在商业项目中使用,运行效果不错。
2、ACache使用 我们先做一个实现数据缓存的案例,然后再归纳一下主要的方法 编写NewsListActivity主要代码如下:
public class NewsListActivity extends Activity { private List<News> list; private ListView listView; private LoadImageAdapter adapter;//适配器 private ACache acache;//缓存框架 @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); super.setContentView(R.layout.load_img_listview_activity); acache=ACache.get(this);//创建ACache组件 initView();//初始化界面,代码不贴了 } public void loadData(){ String cacheData=acache.getAsString("newsList");//从缓存中取数据 if(cacheData!=null){//如果缓存中有,就不访问网络 List<News> newsList=gson.fromJson(cacheData, new TypeToken<List<News>>(){}.getType());//将json转为List list.addAll(newsList); adapter.notifyDataSetChanged(); return; } new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub SystemClock.sleep(2000);//模拟网络耗时 String json=request();//模拟从网络中获取json数据 acache.put("newslist", json, 60*60*1);//将数据存入缓存中,有效时间设置为1小时 List<News> newsList=gson.fromJson(json, new TypeToken<List<News>>(){}.getType()); list.addAll(newsList); handler.sendEmptyMessage(1); } }).start(); } /** * 模拟网络请求方法 * @return json数据 */ private String request(){ News news=null; for(int i=0;i<10;i++){ news=new News(); news.setId(i); news.setImgUrl("course/img/face_"+i+".png"); news.setTitle("新闻标题"+i); news.setSummary("测试"+i); list.add(news); } Gson gson=new Gson(); return gson.toJson(list); } private Handler handler=new Handler() @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub switch(msg.what){ case 1: notify_layout.setVisibility(View.GONE); adapter.notifyDataSetChanged(); break; } } }红色部分就是ASimpleCache实现缓存数据的代码,下面我们说一下主要代码 1、 创建ACache组件 ACache acache=ACache.get(context) 或 ACache acache=ACache.get(context,max_size,max_count) 参数说明: max_size:设置限制缓存大小,默认为50M max_count:设置缓存数据的数量,默认不限制 2、 设置缓存数据 acache.put(key,data,time)或acache.put(key,data) 将数据同时上存入一级缓存(内存Map)和二级缓存(文件)中