Android内存优化

来源:互联网 发布:深圳互联网知乎 编辑:程序博客网 时间:2024/05/23 23:21

OOM是个令人头疼的问题,Android碎片化的低端设备或者是占用内存较高的应用都会面对这个的问题。实际编码中有哪些具体经验可以总结呢?我觉得有以下几点。

1、ListView的adapter的getView方法里回传的convertView没有重用,如果在这个convertView里有分配了内存(如图片等),需要在回传的时候进行回收。

2、注意Cursor使用方式,尽量只查询需要的字段,尽可能的补充查询条件,使得查询结果尽可能精确,缩小范围。使用完毕,注意关闭Cursor。

3、Bitmap使用后注意及时回收,调用recycle函数。解码Bitmap时,注意图片的尺寸,如果只是展示在屏幕范围内而不需要放大图片的话,尽量不要加载尺寸超过屏幕分辨率的图片,那样只会造成无端的内存浪费。

4、选择合适的数据结构,曾经为了将20W+条int数据映射到几十条String数据选择了hashmap,结果这些数据常驻内存之后,居然占到了7MB空间之多。优化的方案是将String抽出来,int使用数组优化。java封装带来的额外内存开销,因为对象类型占据的空间远远超过基本类型,请一定要注意!http://blog.csdn.net/u011974533/article/details/11099369

5、注意内存泄露!java 中的内存泄露问题是当一个长生命周期的对象引用了一个短生命周期的对象时,就有可能造成内存泄露。比如String的subString方法,该方法返回了一个新的String,但是两个String 引用的是同一个char[]。如果两个String长度相差多大,而长String 的生命周期远远短于短String,则应该是用new String 的方式,让短String重新copy一份char[],是的长的char[]能够被及时回收;同理,如果需要多个String,也要尽可能的考虑复用char[]。实际代码要根据需求来写。

6、内存调试。Memory Analyse Tool可以帮助开发者迅速查找内存开销大户,尽快定位问题。

0 0
原创粉丝点击