BaseAdapter的使用

记得一个月前,第一次听到ListView,怎么看都没看懂ListView的节省内存的机制。对于此事还被别人狠狠嘲笑了一番”lian ge listview dou bu hui"。。心痛指数===3颗星

今天打算做一个新闻类app,作为一个app初学者,很多知识完全不懂,先在学的过程中先记下来学到的知识点,希望以后还可以回来查删改一下下= =

1、BaseAdapter

BaseAdapter是一个抽象类,他没有绑定数据,需要我们重新写getCount()  getItem(int position)  getItemId()  getView()函数,其中最重要的是getView函数。

2、 LayoutInflater

LayoutInflater用于加载布局,首先需要通过LayoutInflater.from(context)获取LayoutInflater对象,然后通过LayoutInflater.inflater(resourceId, root)实现设置布局。

同时获取LayoutInflater对象时还可以通过

  1. LayoutInflater layoutInflater = (LayoutInflater) context  
  2.         .getSystemService(Context.LAYOUT_INFLATER_SERVICE);  获得

    3、ListView

ListView属于AdapterView子类,它需要adapter和数据建立连接,但是ListView的机制是什么呢?

========转载地址:http://blog.csdn.net/yelbosh/article/details/7831812=========我觉得他写的很容易懂,反正我是看明白了==========

为什么需要优化呢?因为如果我们有上亿个项目要显示怎么办?为每个项目创建一个新视图?这不可能,因为内存有限制。实际上Android为你缓存了视图。Android中有个叫做Recycler的构件,下图是他的工作原理:

如果你有10亿个项目(item),其中只有可见的项目存在内存中,其他的在Recycler中。其实我的理解Recyler就是一个队列,用来存储不在屏幕范围内的item,如果item滚出屏幕范围,那么就入队,这里的滚出是完全滚出,即边界等也要完全滚出。如果新的item要滚进来,那么android系统的framework就会查看Recyler是否含有可以重复使用的iew,如果有那么就重新设置该iew 的数据源,然后显示,即出队。那么这么多的item其实只需要占用一定空间的内存,这个内存大小是多少呢?我的感觉是手机屏幕所包含的item的个数,再加上1,然后乘以每个item占用的内存。但是最后我发现是加上2.可能是为了使得缓存更大吧。。。。但是为什么加上2,大家应该理解,如果你不理解,那你就把滚动list的过程好好想一想。那个队列无非就是一个缓存罢了,因为我们的目的是通过那个缓存来重复使用那些已经创建的iew。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值