Android 中的缓存机制与实现(杰瑞教育原创).docx_第1页
Android 中的缓存机制与实现(杰瑞教育原创).docx_第2页
Android 中的缓存机制与实现(杰瑞教育原创).docx_第3页
Android 中的缓存机制与实现(杰瑞教育原创).docx_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

烟台杰瑞教育科技有限公司 Android 中的缓存机制与实现Android开发本质上就是手机和互联网中的web服务器之间进行通信,就必然需要从服务端获取数据,而反复通过网络获取数据是比较耗时的,特别是访问比较多的时候,会极大影响了性能,Android中可通过二级缓存来减少频繁的网络操作,减少流量、提升性能。一、二级缓存工作机制所谓二级缓存实际上并不复杂,当Android端需要获得数据时比如获取网络中的图片,我们首先从内存中查找(按键查找),内存中没有的再从磁盘文件或sqlite中去查找,若磁盘中也没有才通过网络获取;当获得来自网络的数据,就以key-value对的方式先缓存到内存(一级缓存),同时缓存到文件或sqlite中(二级缓存)。注意:内存缓存会造成堆内存泄露,所有一级缓存通常要严格控制缓存的大小,一般控制在系统内存的1/4。理解了二级缓存大家可能会有个问题网络中的数据是变化的,数据一旦放入缓存中,再取该数据就是从缓存中获得,这样岂不是不能体现数据的变化?我们在缓存数据时会设置有效时间,比如说30分钟,若超过这个时间数据就失效并释放空间,然后重新请求网络中的数据。有的童鞋就问30分钟内咋办?那好吧,我也没招了,只有下拉刷新了, 实际上这不是问题。二、二级缓存的实现如何实现二级缓存,有很多技术方案,在这里我们使用 ASimpleCache框架来给大家演示一下,通过名字就可以看出它是很容易实现的。1、ACache介绍ASimpleCache是一个轻量级的开源cache框架,实际上就是一个叫ACache的java类。已经在商业项目中使用,运行效果不错。下载地址:/yangfuhai/ASimpleCache2、ACache使用我们先做一个实现数据缓存的案例,然后再归纳一下主要的方法编写NewsListActivity主要代码如下:public class NewsListActivity extends Activity private List 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 newsList=gson.fromJson(cacheData, new TypeTokenList().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 newsList=gson.fromJson(json, new TypeTokenList().getType(); list.addAll(newsList); handler.sendEmptyMessage(1); ).start(); /* * 模拟网络请求方法 * return json数据 */private String request() News news=null; for(int i=0;i10;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:设置限制缓存大小,默认为50Mmax_count:设置缓存数据的数量,默认不限制2、 设置缓存数据acache.put(key,data,time)或acache.put(key,data)将数据同时上存入一级缓存(内存Map)和二级缓存(文件)中参数说明:Key:为存入缓存的数据设置唯一标识,取数据时就根据k

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论