Android(性能)
■ 数据传输
对象和字节流之间的转换
为什么要转? 持久化(装逼说法,JVM非运行的场合),他进程(装逼说法,其他机器JVM,不同的JVM)
Parcelable和Serializable
初衷:
Parcelable: Serializable效率过慢,为了在程序内不同组件间以及不同Android程序间(AIDL)高效的传输数据而设计,
这些数据仅在内存中存在,Parcelable是通过IBinder通信的消息的载体。
Serializable: 保存对象的属性到本地文件、数据库、网络流、rmi以方便数据传输,当然这种传输可以是程序内的也可以是两个程序间的。
一个借助内存,一个借助IO.
■ UI
measure - layout - draw 减少层级 减少子控件数量
viewpaper 同时缓存的page数小于3.并且买个Page在显示时才去加载数据或者网络,避免预加载
图片decode成bitmap内存是成倍的,减小size是根本因素,让服务器提供不同方便率的图片是好的解决方案
线程池
业务上调整 控制网络请求频率
■ Bitmap
http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=498&extra=&page=2
法1
占用内存大小 width * height * 色彩格式(ARGB888=4) * scale(scale = 目标设备dpi/图片所在文件夹dpi)
法2
jpg图片无alpha通道 ARGB888的一般 alpha不需要的场合 (jpg吃cpu来解压缩)
法3
模糊处理
法4
索引位图 一个像素字节
android不支持 黑户
Skia 引擎支持
■ getView findViewByid
问题: findviewbyid的低效率
对策: 缓存。如何缓存,父view通过setTag来绑定ViewHolder,ViewHolder来缓存这些子view。
利用黄油刀组件,即在第一次创建ViewHolder时可以完成所有子控件的绑定
问题:BaseAdapter的getView (ListView例)
对策:先判断view是否为空,不空的场合直接利用该缓存着的view。