20条性能优化的建议 App性能优化的建议有哪些

20条建议1. itmap的合理使用:使用Bitmap过后, 就需要及时的调用recycle方法来释放Bitmap占用的内存空间, 而不要等Android系统来进行释放 。
代码示例:

// 先判断是否已经回收
【20条性能优化的建议 App性能优化的建议有哪些】if(bitmap != null && !bitmap.isRecycled){
bitmap.recycle;
bitmap = null;
}
System.gc;
2. 对常量使用static final修饰符
static final int intVal = 42; static final String strVal = “Hello, world!”;
将一个方法或类声明为final不会带来性能的提升, 但是会帮助编译器优化代码 。 举例说, 如果编译器知道一个getter方法不会被重载, 那么编译器会对其采用内联调用 。
3. 静态方法代替虚拟方法
如果不需要访问某对象的字段, 将方法设置为静态, 调用会加速15%到20% 。 这也是一种好的做法, 因为你可以从方法声明中看出调用该方法不需要更新此对象的状态 。
4. 减少不必要的全局变量
尽量避免static成员变量引用资源耗费过多的实例, 比如Context, 因为Context的引用超过它本身的生命周期, 会导致Context泄漏 。 所以尽量使用Application这种Context类型 。 可以通过调用
Context.getApplicationContext或 Activity.getApplication轻松得到Application对象 。
5. 避免创建不必要的对象: 就是避免创建短命的临时对象 。 减少对象的创建就能减少垃圾收集, 进而减少对用户体验的影响 。
例如:频繁操作一个字符串时, 使用StringBuffer代替String 。
对于所有所有基本类型的组合:int数组比Integer数组好, 这也概括了一个基本事实, 两个平行的int数组比 (int,int)对象数组性能要好很多 。 .避免使用浮点数
通常的经验是, 在Android设备中, 浮点数会比整型慢两倍 。
7. 使用实体类比接口好
假设你有一个HashMap对象, 你可以将它声明为HashMap或者Map:
Map map1 = new HashMap;
HashMap map2 = new HashMap;
哪个更好呢?
按照传统的观点Map会更好些, 因为这样你可以改变他的具体实现类, 只要这个类继承自Map接口 。 传统的观点对于传统的程序是正确的, 但是它并不适合嵌入式系统 。 调用一个接口的引用会比调用实体类的引用多花费一倍的时间 。 如果HashMap完全适合你的程序, 那么使用Map就没有什么价值 。 如果有些地方你不能确定, 先避免使用Map, 剩下的交给IDE提供的重构功能好了 。 (当然公共API是一个例外:一个好的API常常会牺牲一些性能)
8. 访问成员变量比访问本地变量慢得多
for循环:不要在for的第二个条件中调用任何方法
反例:for(int i =0; i < this.getCount; i++) {}
正例:int count = this.mCount; int count = this.getCount;
for(int i =0; i < count; i++) {
}
9. 资源类对象在不使用的时候, 应该及时关闭它们, 方便它们的缓存数据能够及时回收 。
例如:Cursor、File文件等都需要在finally中关闭资源性对象, 避免在异常情况下资源对象未被释放的隐患
10. 注册广播接收器、注册观察者等需要在不使用的时候取消注册 。
例如:假设在Activity中, 监听系统的电话服务, 可以在Activity中定义一个PhoneStateListener的对象, 同时将它注册到TelephoneManager服务中 。 对于Activity对象, 理论上要求Activity退出后该Activity的对象就会被释放掉 。 但是如果在释放Activity对象时, 忘记取消之前注册的PhoneStateListener对象, 则会导致Activity无法被GC回收 。 如果不断的进出这个Activity, 则最终会由于大量的Activity对象没有办法被回收而引起频繁的GC情况, 甚至导致Out Of Memory 。
11. 有效的利用系统自带的资源, Android系统内置了大量的资源, 比如字串、颜色定义、常用Icon图片、动画样式、及简单的布局, 没有特殊要求, 资源可以在程序中直接引用 。 这样不仅减少内存的开销, 还可以减少apk的大小 。
12. 视图复用, 使用ViewHolder实现ConvertView复用, 这基本上是所有容器控件的处理方式, 如ListView、GridView等 。
13. 使用最优的数据类型, 比较少的对象数时, ArrayMap替换HashMap的使用, 避免使用枚举, 枚举变量非常方便, 但不幸的是它会牺牲执行的速度和并大幅增加文件体积 。
14. 图片内存优化
Android提供的多种位图格式中, 最高的是RGB_8888, 也是系统默认的位图格式, 其他几种都减少位图通道, 可以减少内存开销, 如一些局部图片、小屏幕手机或者对图片质量要求不高的场景, 均可以使用RGB_565, 或者ARGB_4444等图像格式 。

推荐阅读