I/O性能
检测工具
Systrace/Strace
STRICTMODE
建议
- 避免主线程操作文件和数据库
- 提前初始化Sharepreference,用apply代替commit
- 减少从数据库读取的数据量
- 数据库减少使用AUTOINCREMENT
- 频繁查询的表使用索引
- 避免无效索引
- 批量更新数据库使用事务
- ZIP压缩大量小文件建议使用ZipInputStream,普通使用ZipFile效率更高
内存
检测工具
Top
meminfo
DDMS
MAT
LeakCanary
Android Monitor
Chrome DevTool(H5)
建议
-
避免Activity泄漏
-
尽量使用RGB565
-
避免内存重复
-
将图片放在合适的资源文件
(高密度的系统去使用低密度目录下的图片资源时,会将图片长宽自动放大以适应高密度的精度,当然图片占用的内存会变大.所以如果提供的图片资源有限,那么图片资源应该尽量放在高密度文件夹下,这样可以节省图片的内存)
网络
检测工具
Wireshark
fidder
tcpdump
建议
- 避免重复上传/下载
- JS/CSS/HTML需要进行压缩
- 使用更优的图片压缩(webp)
CPU
检测工具
dumpsys cpuinfo
Android Monitor
建议
- 能用int的不要用float
- 使用缓存和批量预处理来提升算法效率
电池
建议
- 锁屏/灭屏/程序放置后台时,释放或者停止Android涉及的耗电服务
- 锁屏或者灭屏释放Wakelock
- 程序后台CPU不能连续工作5分钟且平均超过5%
交互类性能
检测工具
systrace
TraceView
slickr
建议
- 合理使用硬件加速
响应时延
建议
- 启动速度小于2秒
- 启动速度小于2秒
- 避免黑屏
注:
-
首选静态虚拟
如果你不需要访问对象的字段,请将方法设为静态,调用速度会快15%-20%
-
使用增强型for循环
增强型for循环在没有JIT的设备上是最快的
-
考虑包而不是私有内部类的私有访问
-
了解并使用库
-
避免过度创建对象
-
不要过度使用枚举,枚举占用的内存空间要比整型大
-
常用请使用static final修饰符
-
使用一些Android特有的数据结构,比如SparseArray和Pair等
-
适当使用软引用/弱引用
-
采用内存缓存和磁盘缓存
-
尽量采用静态内部类,这样可以避免潜在的由于内部类而导致的内存泄漏
-
使用SurfaceView加载大帧率的动画
网友评论