博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android内存泄漏的集中情况
阅读量:7121 次
发布时间:2019-06-28

本文共 668 字,大约阅读时间需要 2 分钟。

hot3.png

常见的内存泄露场景

1、类的静态变量持有大数据对象、如Bitmap

     静态变量会长期维持对对象的引用,阻止垃圾回收

2、非静态内部类的静态实例

     非静态内部类会维持一个到外部内实例的引用,如果非静态内部类的实例是静态的就会间接长期维持着外部类的引用,阻止回收

3、资源对象未关闭,如Cursor File Socket等,这种情况应该在finally中关闭

4、注册对象未反注册

     未反注册会导致观察者列表里维持着对象的引用,阻止垃圾回收

5、Handler临时性内存泄露

Handler通过发送Message与主线程交互,Message发出之后是存储在MessageQueue中的,有些Message也不是马上就被处理的。在Message中存在一个 target,是Handler的一个引用,如果Message在Queue中存在的时间越长,就会导致Handler无法被回收。如果Handler是非静态的,则会导致Activity或者Service不会被回收。

由于AsyncTask内部也是Handler机制,同样存在内存泄漏的风险。

此种内存泄露,一般是临时性的。

预防

     不要维持到Activity的长久引用,对activity的引用应该和activity本身有相同的生命周期。

     尽量使用application context代替activity context

Activity中尽量不要使用非静态内部类和用WeakReference代替

转载于:https://my.oschina.net/u/1177694/blog/549533

你可能感兴趣的文章
jmeter 使用命令行执行
查看>>
高效程序员的45个习惯の欲速则不达
查看>>
原生JS封装运动框架。
查看>>
HT for Web 中Painter的介绍及用法
查看>>
股指期货模拟系统
查看>>
基于Spark的电影推荐系统(电影网站)
查看>>
【HNOI 2016】序列
查看>>
PowerShell定时记录操作系统行为
查看>>
Angular2之路由学习笔记
查看>>
JSP中文件上传的关键步骤
查看>>
数据结构上机3栈-括号匹配
查看>>
xfire冲突问题解决(maven配置)
查看>>
UINavigationController_学习笔记
查看>>
.htaccess更改目录下的默认主页
查看>>
Android WindowManager实现悬浮窗效果 (一)——与当前Activity绑定
查看>>
hdu 4717 Tree2cycle(树形DP)
查看>>
镜像的使用(6-13)
查看>>
SQL Server 时间戳与时间格式互相转换
查看>>
RabbitMQ入门-Topic模式
查看>>
多线程面试体系列(13):多线程同步内功心法——PV操作下
查看>>