一、资源方面
1、尽量使用存为web格式的png图片,可以大幅减少图片字节大小并保持效果不变,如有的png小图片都1-2M,其实优化之后十多K可以达到同样的显示效果。
2、小图片太多的话,可以拼到一张图上,然后clip要显示的部分
3、使用点9格式图片
4、使用proguard混淆,proguard在防止反编译的同时最大的作用就是大幅减少文件大小
5、能使用代码设置背景颜色的地方绝不使用颜色图片
二、布局方面
1、布局去掉没必要的嵌套layout,层次越多越耗性能,减少复杂度
2、在系统组件基础上自定义组件,提高复用效率
3、使用<include>标签共享布局,使用<merge>优化布局层次
4、listview优化,网上很多,不一一列举了
5、将背景设置为空,将Acitivity 中的Window 的背景图设置为空getWindow().setBackgroundDrawable(null);
三、代码方面
1、不等资源自动回收,把对象设置null,主动调用System.gc();
2、不必要的操作不要放到循环中,如实例化变量等
3、StringBuffer代替String进行字符串操作
4、多使用局部临时变量(栈内存),少使用静态变量实例变量(堆内存)
5、移位操作代替乘除操作
6、使用System.arraycopy()复制数组
7、为vector\hashtable定义初始大小
8、统一设置log打印的开关,正式发布时去掉Log输出
9、能用sharepreference的用sharepreference,否则用文件操作,最次用数据库,文件操作的速度比数据库的操作要快10倍左右
10、采用的数据类型、数据结构、算法是否可以调优,如二维数组占内存是一维数组的10倍,尽量不用浮点数、枚举类型,快速排序代替冒泡排序,二分查找代替线性查找有序数组,线性数据使用循环二叉树数据使用递归等。
11、http设置连接超时和响应超时,数据可以使用gzip压缩
12、finally中关闭流对象
13、使用httpurlconnection而不是用httpclient进行http网络连接
14、及时关闭cursor,不要过多进行打开关闭cursor操作
四、其他
1、使用traceview查看内存使用情况
2、使用hierarchy view查看布局是否可以优化