Android内存泄漏的避免方法
2016-12-23 10:14
239 查看
参考此链接,http://www.androidchina.net/6130.html
Android内存泄漏主要有六大原因:
1、未及时关闭资源,如游标cursor。
2、构造Adapter时,没有使用convertView。
3、Bitmap对象不使用时候没有使用recycle()释放内存。
4、使用Application的context替代Activity的context。
5、注册没取消造成的泄漏。
一般内存泄漏(traditional memory leak)的原因是:当该对象的所有引用都已经释放了,对象仍未被释放。(如:Cursor忘记关闭等)
逻辑内存泄漏(logical memory leak)的原因是:当应用不再需要这个对象,当仍未释放该对象的所有引用。
参考:http://www.codeceo.com/article/8-ways-android-memory-overflow.html
6、内部类持有对外部类的强引用:
6.1:内部类的优势之一就是可以访问外部类,不幸的是,导致内存泄漏的原因,就是内部类持有外部类实例的强引用。解决办法就是销毁的时候释放(置空)引用;
6.2:相似地,匿名类也维护了外部类的引用。所以内存泄漏很容易发生,当你在Activity中定义了匿名的AsyncTsk。当异步任务在后台执行耗时任务期间,Activity不幸被销毁了(译者注:用户退出,系统回收),这个被AsyncTask持有的Activity实例就不会被垃圾回收器回收,直到异步任务结束。
6.3:同样道理,定义匿名的Runnable,用匿名类Handler执行。Runnable内部类会持有外部类的隐式引用,被传递到Handler的消息队列MessageQueue中,在Message消息没有被处理之前,Activity实例不会被销毁了,于是导致内存泄漏。
6.4:通过Context.getSystemService(int name)可以获取系统服务。这些服务工作在各自的进程中,帮助应用处理后台任务,处理硬件交互。如果需要使用这些服务,可以注册监听器,这会导致服务持有了Context的引用,如果在Activity销毁的时候没有注销这些监听器,会导致内存泄漏。
Android内存泄漏主要有六大原因:
1、未及时关闭资源,如游标cursor。
2、构造Adapter时,没有使用convertView。
3、Bitmap对象不使用时候没有使用recycle()释放内存。
4、使用Application的context替代Activity的context。
5、注册没取消造成的泄漏。
一般内存泄漏(traditional memory leak)的原因是:当该对象的所有引用都已经释放了,对象仍未被释放。(如:Cursor忘记关闭等)
逻辑内存泄漏(logical memory leak)的原因是:当应用不再需要这个对象,当仍未释放该对象的所有引用。
参考:http://www.codeceo.com/article/8-ways-android-memory-overflow.html
6、内部类持有对外部类的强引用:
6.1:内部类的优势之一就是可以访问外部类,不幸的是,导致内存泄漏的原因,就是内部类持有外部类实例的强引用。解决办法就是销毁的时候释放(置空)引用;
6.2:相似地,匿名类也维护了外部类的引用。所以内存泄漏很容易发生,当你在Activity中定义了匿名的AsyncTsk。当异步任务在后台执行耗时任务期间,Activity不幸被销毁了(译者注:用户退出,系统回收),这个被AsyncTask持有的Activity实例就不会被垃圾回收器回收,直到异步任务结束。
6.3:同样道理,定义匿名的Runnable,用匿名类Handler执行。Runnable内部类会持有外部类的隐式引用,被传递到Handler的消息队列MessageQueue中,在Message消息没有被处理之前,Activity实例不会被销毁了,于是导致内存泄漏。
6.4:通过Context.getSystemService(int name)可以获取系统服务。这些服务工作在各自的进程中,帮助应用处理后台任务,处理硬件交互。如果需要使用这些服务,可以注册监听器,这会导致服务持有了Context的引用,如果在Activity销毁的时候没有注销这些监听器,会导致内存泄漏。
相关文章推荐
- 对android内存优化的方法,方案,规则及对内存泄漏如何避免
- android内存优化的方法,方案,规则及对内存泄漏如何避免
- Android 非UI线程使用View.post()方法一处潜在的内存泄漏
- Android 编码规范:(七)避免使用终结方法
- Android-避免出现bitmap内存限制OUT OF MEMORY的一种方法
- Android 避免内存泄漏(译)
- 如何避免Android内存泄漏
- Android-避免出现bitmap内存限制OUT OF MEMORY的一种方法
- android下载大图片避免OOM的解决方法
- 如何避免Android内存泄漏——Context
- Android-避免出现bitmap内存限制OUT OF MEMORY的一种方法
- 如何避免Android内存泄漏
- CDynamicParameterAccessor避免内存泄漏的使用方法
- 如何避免Android内存泄漏
- android中避免大图片解析导致内存溢出 OutOfMemoryError的优化方法
- .如何避免Android内存泄漏
- 避免android程序开发内存泄漏-context
- Android-避免出现bitmap内存限制OUT OF MEMORY的一种方法-缓存
- 如何避免Android内存泄漏
- Android-避免出现bitmap内存限制OUT OF MEMORY的一种方法