数据缓存的两种方法
2013-01-29 14:52
197 查看
数据缓存的两种方法:
1.数据缓存到/data/data目录(ROM) 数据缓存到手机的sd卡上
特殊的业务场景,不允许把缓存数据存到手机的rom或者sd卡上
2.把资源文件缓存到内存(RAM)里面,保证了数据的安全性,并且不会占用、多用的外存储空间
每一次显示图片的时候,首先判断map缓存集合里面是否存在缓存的图片对象
软引用:特殊的引用类型,当java虚拟机内存不足的时候,虚拟机的垃圾回收器会试图回收掉,采用软引用方式应用的对象,
以达到释放内存空间的作用。(特点是由java虚拟机来保证的)
强引用:默认的类型,如果一个对象 保存的有对应的引用,这个对象就不会被垃圾回收器所回收
如果一个ListView里面有很多条目
分批的方式,或者分页的方式加载数据
一次从服务器上加载5条数目信息,当用户拖动界面到最下面的时候,加载更多的数据信息
1.给listView注册一个滚动的监听事件。
2.当用户把listView滚动到界面的最下面的时候,得到当前最后一个条目的position
3.根据这个position获取position~position+5的数据。
4.通知listview更新显示的数据内容
解决listview的快速拖动的问题
当listview在滚动状态下,不去加载listview里面真是的图片和内容,而是把一个缩略图加载界面上
当listview的滚动状态停止的时候 采取真正的更新里面的条目的内容
listview 属性
如果要在滚动的时候在中间显示东西
那么就注册onScrollListener 在onScroll事件中进行处理
关于listview的优化:
1. listview的界面的优化:
时间换空间: 内存不足,不能直接获取全部的数据,只能多花时间,一段一段的获取数据并显示
时间换时间: 开机优化, 开机的服务要启动,应用程序要启动加载.
如何优化android手机的启动速度, 如何优化android的虚拟机.
空间换空间: 大数据的交换和存储
空间换时间: 内存缓存 sd卡缓存 空间换时间.
解决listview的快速拖动的问题:
当listview在滚动状态下,不去加载listview里面真实的图片和内容,而是把一个缩略图加载界面上.
当listview的滚动状态停止的时候 才去真正的更新里面的条目的内容.
1.数据缓存到/data/data目录(ROM) 数据缓存到手机的sd卡上
特殊的业务场景,不允许把缓存数据存到手机的rom或者sd卡上
2.把资源文件缓存到内存(RAM)里面,保证了数据的安全性,并且不会占用、多用的外存储空间
private Map<String,Bitmap> bitmapCache; bitmapCache=new HashMap<String,Bitmap>();
每一次显示图片的时候,首先判断map缓存集合里面是否存在缓存的图片对象
OutOfMemoryException();
软引用:特殊的引用类型,当java虚拟机内存不足的时候,虚拟机的垃圾回收器会试图回收掉,采用软引用方式应用的对象,
以达到释放内存空间的作用。(特点是由java虚拟机来保证的)
强引用:默认的类型,如果一个对象 保存的有对应的引用,这个对象就不会被垃圾回收器所回收
//软引用的集合,软引用的集合里面的是一个bitmap的类型 private Map<String,SoftReference<Bitmap>> bitmapCache; holder.iv.setImageBitmap(bitmapCache.get(book.getBookicon()).get()); SoftReference<T> 软引用的类型 T代表的是泛型 SoftReference <Bitmap> sr=new SoftReference<Bitmap>(bitmap)//向软引用里面存放一个bitmap Bitmap bitmap=sr.get();//获取软引用里面存放的bitmap //当内存不足的时候 sr里面存放的对象会被系统的垃圾回收器回收,sr.get()==null;
如果一个ListView里面有很多条目
分批的方式,或者分页的方式加载数据
一次从服务器上加载5条数目信息,当用户拖动界面到最下面的时候,加载更多的数据信息
1.给listView注册一个滚动的监听事件。
2.当用户把listView滚动到界面的最下面的时候,得到当前最后一个条目的position
3.根据这个position获取position~position+5的数据。
4.通知listview更新显示的数据内容
1.//给listview设置一个滚动的监听事件 list.setOnScrollListener(new OnScrollListener(){ /** 静止~滚动 滚动~静止 */ public void onScrollStateChanged(AbsListView view,int scrollState){ if(isloading)//在加载数据的过程中 不再相应listview的拖动事件,防止加载错误的信息,防止加载错误的id return; if(scrollState==OnScrollListener.SCROLL_STATE_IDLE){ //如果listview里面最后一个可见的条目的id 等于当前listview里面元素的个数大小 //如果listview被拖动到了界面的最后一个条目 int lastPostion=list.getLastVisiblePosition();//从0开始 int size=books.size();//listview里面有多少个条目 if(lastPostion==(size-1)){ //代表最后一个可见的条目是listview的最后一个条目 //加载更多的内容 startPostion+=count; //加载从startposition开始的数据 fillData(); } } } public void onScroll(AbsListView view,int firstVisibleItem,int visibleItemCount,int totalItemCount){ } }); //ListView的懒加载 //连接服务器下载图片到本地,缓存图片到本地sd卡上 Bitmap bitmap=BitmapFactory.decodeFile("/sdcard/a.jpg");//这个方法如果图片比较大 100k 150ms bitmap.compress(CompressFormat.JPEG,20,outputStream); //在SD卡上保存的有图片的原图,图片的缩略图 /** 当为了避免listview拖动的时候有卡顿的现象出现,在listview滚动的时候显示图片的缩略图 */ case OnScrollListener.SCROLL_STATE_IDLE: scrolling=false; int position=lv.getFirstVisiblePosition(); //获取listview里面的某个孩子的view对象lv.getChildAt(index); int count=lv.getChildCount(); for(int i=0;i<count;i++){ TextView tv=(TextView)lv.getChildAt(i); int realpostion=position+i; tv.setText("加载"+realpostion+"原图"); }
解决listview的快速拖动的问题
当listview在滚动状态下,不去加载listview里面真是的图片和内容,而是把一个缩略图加载界面上
当listview的滚动状态停止的时候 采取真正的更新里面的条目的内容
listview 属性
android:fastScrollEnabled="true" //如果listview有很多条目,在listview的右边会显示出来一个快速滚动的进度条 android:scrollbarstyle=""//设置滚动条的位置 scrollbars="none" //隐藏掉滚动条目 lv.addHeaderView(v);//在listview上面增加一个view lv.addFooterView();//在listview尾部增加一个view
如果要在滚动的时候在中间显示东西
那么就注册onScrollListener 在onScroll事件中进行处理
//listview滚动的时候 调用的方法 private WindowManager wm; wm=getWindowManager(); onScroll(){ if(tv_index=null){ tv_index=new TextView(this); tv_index.setText((String)lv.ItemAtPosition(firstVisibleItem)); //这里的写法具体的查看豆瓣的第3天 视频19 code为listviewdemo wm.addView(tv_index,params); } }
关于listview的优化:
1. listview的界面的优化:
android:divider="@android:color/transparent" listview条目与条目之间的间隙的分割内容 android:paddingTop="5.0dip" listview条目之间的间隙 android:listSelector="@color/transparent" listview点中的颜色变化 android:fastScrollEnabled="true" 如果listview有很多个条目 ,在listview的右边 会显示出来一个快速滚动的进度条 (listview里面的条目至少要滚动5个屏幕以上) android:scrollbarStyle="outsideOverlay" android:scrollbars="none" footer view header view 快速拖动时候的悬浮提示(window manager) 新浪微博的 那个下拉更新是怎么做的啊 listview的下啦更新. 1. 设置listview的headerview 显示 向下拖动 更新的(默认的 显示是隐藏的) 2. listview数据显示的优化. 复用历史缓存的view对象, convertView 减少 采用布局填充器服务 填充布局的次数,达到减少xml->view 操作的次数. 定义了静态的viewholder 储存了 view对象里面控件的引用, view.setTag() view.getTag(); 减少遍历view对象 树状结构的次数. 采用了内存缓存 缓存一些经常使用的数据 服务器上的图片,缓存这些图片,(缓存手机的内存卡,sd卡)利用softreference把图片给缓存到内存里面 listview的分页显示 //服务器需要提供接口, 一次获取一段的数据. //数据库提供接口 ,一次查询一段的数据. listview的延时加载 //如果listview里面要显示的有很多的数据, 我们不需要一次把所有的数据都获取出来. //分段的方式 一段一段的把数据下载下来. 注册listview的 onScrollListener(); 发现最后一个可见的条目 为listview里面数据适配器里面的最后的一个条目, 加载更多的内容.
时间换空间: 内存不足,不能直接获取全部的数据,只能多花时间,一段一段的获取数据并显示
时间换时间: 开机优化, 开机的服务要启动,应用程序要启动加载.
如何优化android手机的启动速度, 如何优化android的虚拟机.
空间换空间: 大数据的交换和存储
空间换时间: 内存缓存 sd卡缓存 空间换时间.
解决listview的快速拖动的问题:
当listview在滚动状态下,不去加载listview里面真实的图片和内容,而是把一个缩略图加载界面上.
当listview的滚动状态停止的时候 才去真正的更新里面的条目的内容.
相关文章推荐
- 取得缓存表数据两种方法
- ajax中返回数据的编码格式及不缓存的两种方法:
- HP的 BBWC FBWC (RAID 卡缓存数据保存的两种方式) 区别方法
- jquery的两种重要的方法以及data方法缓存数据详解
- 不同apk间共享数据的两种方法
- Spinner下拉列表装填数据的两种方法
- 存储过程批量处理数据的两种方法
- 将DataGridVIew数据导出到Excel中的两种方法
- Java构造和解析Json数据的两种方法详解
- 两种多线程操作共享数据的方法
- 两种HTTP方法服务器传送表单数据:GET和POST的区别
- SPComm接收数据的两种方法
- Android提交数据到服务器的两种方式四种方法
- Android-缓存数据保存-通用方法
- Extjs 定义本地数据 Store 两种方法
- Django—Form两种保留用户提交数据的方法
- Java构造和解析Json数据的两种方法详解一
- c#编程 datagridview显示数据的两种方法
- 解决下载妹子网图片数据不全的两种方法
- 两种方法将oracle数据库中的一张表的数据导入到另外一个oracle数据库中