Android 内存优化代码篇总结


Android内存是个大块,经常说到的是关于内存的使用和优化,这方面网上有很多经验,本人就几年的经验和网络知识相结合,总结出以下条目:

一、static 和 final 的合理使用,给字符串和常量加上这两个关键字,他们会加载到静态中,并且只加载一次,否则这个类打开一次就加载一次,造成了资源的浪费;static修饰的一般是基本类型和轻量级对象,工具类方法,内部类等,一般不要修饰重量级集合等。
二、注意代码中的无关引用,比如在Activity中把Context设置为static,结果造成activity一直不能被回收,造成内存泄漏;或者一个单例模式的类需要传入context,结果把activity传了进去,也会造成内存泄漏,此时用getApplication()代替activity合适。
三、对于一些对象,为了安全起见,可以加入软引用来控制,或者使用系统提供的LruCache缓存。
四、Handler对象,适用于上一条,另一种情况,activity关闭时,Handler中还有消息没被执行,此时可以调用handler.removeCalllBacksAndMessages(null);方法,取消所有未被执行的消息。Handler中发信息,Message不要直接new,而要复用。
五、Bitmap 大胖子,缩放时可以使用Options中的insampleSize属性,不用加载就可以知道宽和高;Bitmap要缓存,防止不停地创建,在新api中,bitmap在堆中,置空即可,但老的版本中,还是要先recycle(),然后再置空。
六、使用数据库,要用到游标,Cursor使用完后要及时关闭。I/O流也是同样道理,使用完后要关闭。
七、布局设置背景时,如果是纯色,直接用color;规则的图形,用shape;再复杂点的可以使用9path;最糟糕的情况,前三种都不符合需求,那么就用图片,只针对主流的三个包切图就好。
八、ListView和GridView使用,一定要item缓存;适配器getView()中,针对某个view设置点击事件时,要防止直接new OnClickListener()这种写法,页面滑动回来,就重新new一个对象设置进去,造成不必要的浪费。在自定义View时,onDraw()方法里,避免 new Paint(),没刷新一次界面就new一次对象。
九、广播记得要控制好生命周期,及时解绑,否则会造成内存泄漏;Service用完后要及时停止销毁,可用IntentService来代替Service。
十、线程问题,当需要大量的子线程时,毫无疑问要选择使用线程池。
十一、字符串的大量拼接问题,使用StringBuilder代替String。
十二、枚举比较消耗资源,能省则省。
十三、常用集合的选择,ArrayList和LinkedList的选择,如果重查找,用ArrayList,如果重在增删,则用LinkedList。遍历对象,ArrayList首选常规for循环,LinkedList首选迭代器。
十四、使用Lint检查代码。

猜你喜欢

转载自blog.csdn.net/Deaht_Huimie/article/details/52968496