Skip to content
qii edited this page Mar 7, 2013 · 8 revisions

减少 item 的层级

用 RelativeLayout 减少 item 的层级,如果只有一层那是最好的

注意背景不要多次绘制

Android 默认有个背景,ListView 默认背景是透明,如果你的 item 是自己定义背景,那么考虑要把 Activity 的背景去掉,getWidnows().setBackground(null)

ViewHolder 模式

因为 ListView 是回收item的,创建一个class,把item的各个控件都设置上去,之后就少了 findViewById 这一步,findViewById 实际就是不停的遍历里面的 View,找到 id 相同的

关闭硬件加速

Andoid 设备太多,硬件加速问题太多。4.0 之前,Nexus 设备的硬件加速会导致 TextView setText 性能下降,引起 ListView 滚动卡顿,4.1 之后,正常了,但是另外一方面,我测试过 9300 韩版 的 4.1 的硬件加速依然有问题。

所以说一个开关“列表中 TextView 硬件加速”的选项一定要有

后台生成表情、@、#高亮

表情,链接都是 SpannalString,无法序列化保存到数据库,所以每次无论是从服务器获取数据还是从数据库获取数据,都需要处理生成一次 SpannalString

快速滑動的時候不進行圖片下載

检测 ListView 滚动,在 Fling 状态不开启异步下载的线程,在滚动停止后,刷新 ListView

快速滚动

因为现在没有 api 检测快速滚动的状态,所以走另外一条路,在进行下载图片时候,把执行下载任务这一步延后0.3秒左右,因为 ListView 的 item 是回收的,所以判断是不是当前要的图片任务,如果不是,就覆盖,于是之前0.3秒安排的执行任务就被取消了

缓存 TextView 的高宽

设2个HashMap,分别存储原微博和转发微博2个TextView的高宽,大约可以将 adapter getView 中,TextView setText 的cpu占用降低10%

当前还没找到好的方法可以事先计算出来高宽

日期事先处理成 Millis

拆分图片下载处理任务成图片下载、图片处理2条任务

TextView 内容一样就不要 setText

给 TextView setTag,如果原微博是同一个,就不用再赋值了,主要是应对“提及的微博”和“收到的评论”那2条列表

设置日期时间,先 getText 获取当前的内容对比下要显示的内容,如果一样,就跳过去

ImageView