关于android泄露

来源:互联网 发布:国内男士衬衣品牌 知乎 编辑:程序博客网 时间:2024/06/10 09:37

android基于java的gc机制,所以,泄露问题,应当慎之。尤其是移动端。

java的gc基于有向图原理。这篇文章很好的介绍了gc原理:http://heimaxiebo.iteye.com/blog/1835579。

简而言之,就是将gc看成一棵树,root是线程,子节点都是线程下的内存引用。如果某个引用不再被其他引用所利用,就回收之。


就像是某个娃娃对应某个爸或者妈,或者爷爷奶奶,假设是只有一个爷爷,正常情况是,爷爷不要孩子了,于是扔给野兽了,然后爷爷自己也挂了,于是一家没了,干干净净。但是突然有一天,爷爷挂了,被野兽吃了,这个孩子成了野孩子,没死干净,so,溢出出现了。


android中常见的情景是:某个activity启动了线程,activity是爷爷,线程是孙子。root是某个不明的大神,不要问我。如果孙子死得快,爷爷等会死,没问题,都没了。但问题是,孙子不听话,不知道爷爷快死了。so.当爷爷挂了的时候,孙子跑回家。

对于这种线程熊孩子的问题:

我们可以这样做。告诉熊孩子,给你个名义的家,在老子活着的时候,你还可以用点东西,老子死了,统统收回。你爱干嘛干嘛。

于是针对线程,1.我们可以加入一个static关键字。告诉编译器,这个类只是暂居与他的外层类。2.另外想引用外层类的话,就使用WeakReference,外层类挂了。在线程中判断一下,老子死了,屋子没了,咋办?凉拌吧。。。别得瑟了,赶紧交代一下工作,准备后事吧。

当然。这个孙子如果拿了太多的东西放到这个破房子里,也有可能会坏了爷爷的破屋,so。不要搞太多东西,免得上帝也头痛。不要的,尽量扔出去。

这里重点批评bitmap,如果我们没有保存bitmap的引用,就无法为他收尸了。

针对bitmap:1.可以利用SoftRefrence,在小账本里面记着孙子拿回来的东西,那一天房子不够用了,就悄悄地扔出去吧。2.命令孙子,带回家的太多bitmap,用完马上释放,3.或者,敲去边边角角,放低分辨率,才允许放行。


今天就这么多吧。下面分享一下泄露的相关文章:http://hchaojie.iteye.com/blog/1774772

http://blog.csdn.net/boliu123/article/details/7843766这篇文章的大神讲的很详细,另外还有内存泄露的调试方法

原创粉丝点击