当前位置: 代码迷 >> 综合 >> Android性能——内存溢出(篇二:内存溢出的原因)
  详细解决方案

Android性能——内存溢出(篇二:内存溢出的原因)

热度:33   发布时间:2024-02-19 18:11:07.0

(一) 查询数据库没有关闭游标

(二) 构造Adapter时,没有使用缓存的 convertView

(三) Bitmap对象不在使用时调用recycle()释放内存

(四)当项目中包含大量图片,或者图片过大,可能会oom

(五) 释放对象的引用

第一:不要为Context长期保存引用(要引用Context就要使得引用对象和它本身的生命周期保持一致)。

第二:如果要使用到Context,尽量使用ApplicationContext去代替Context,因为ApplicationContext的生命周期较长,引用情况下不会造成内存泄露问题。

第三:在你不控制对象的生命周期的情况下避免在你的Activity中使用static变量,因为static是与程序的生命周期一样的。尽量使用WeakReference去代替一个static。

第四:垃圾回收器并不保证能准确回收内存,这样在使用自己需要的内容时,主要生命周期和及时释放掉不需要的对象。尽量在Activity的生命周期结束时,在onDestroy中把我们做引用的其他对象做释放,比如:cursor.close()。

五:匿名内部类/非静态内部类,持有对外部类(一般是Activity)的引用。如果有生命周期不一样的异步线程,那就要小心了,比如Handler。

六:监听器没有及时释放(context.registerReceiver(recevier,intentFilter);)

七:单例模式一般都是持续于整个生命周期的,那么持有外部的引用也会造成内存泄漏

  相关解决方案