kyze8439690
2015-09-11 18:50:17 +08:00
通用的思想而已,硬件加速本身会占用内存。
然后你所说的列表滚动卡的问题,也可以用空间换速度。
首先列表为什么会卡?这就涉及列表滚动的时候做了什么事。
主要看 getView 函数,
可能的 inflate ,以及数据绑定。然后 listview 去 measure , layout ,最后 draw 。
inflate 方面,可能因为 xml 的层次过多导致 inflate 耗时过多,这时候就要简化 xml 结构,整个也会影响 listview 的 measure 和 layout 的耗时。还有一个可能就是一个 listview 采用了多种 type ,导致滚动时新的 type 没有缓存,导致 inflate 耗时,这时候可以事先新建好 view 来复用。
inflate 之后,就是数据绑定的事情了,这里可能会对数据做一些处理,比如格式化,等等。这里就是我建议的空间换速度,把数据事先格式化好,尽量减少 getView 的耗时。
measure 和 layout 就靠简化 xml 层次,前面已经说了。 draw 的话就尽量减少 overdraw 。
关于硬件加速的问题,一般不会去开启它,因为他是全局性的( application )。可以尝试在 View 的层次去局部开启硬件加速,比如对一个 View 做 animation 的时候,先开启硬件加速, animation 结束后关闭硬件加速。
可能有点乱,讲究着看。