由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - Android memory leak
相关主题
谁来推荐个好用的distributed memory cache哪位在Linux上用C++碰到过memory fragmentation吗?
redis set Time complexity: O(1) 怎么可能?C++ OO approach to use multi-dim array for HPC
科普贴,fusion IOgoogle 下面那个previous / next 怎么实现呢?
TeacherWei 的订票机的问题is it possible to design a zero miss rate cache?
小公司的网站也要用memcached之类的cache吗?一个没想明白的问题
我的一个客户案例(high traffic),请大家批判分析指点[合集] 问个面试题
git的官方文档真叫一个烂问个编程问题:关于cache (转载)
persistence的选择求教各位高手简单网络问题
相关话题的讨论汇总
话题: memory话题: leak话题: android话题: cache
进入Programming版参与讨论
1 (共1页)
s********k
发帖数: 6180
1
大牛来讲讲,android里面memory leak一般都是什么导致的?
f*******t
发帖数: 7549
2
Stackoverflow上肯定有详尽的解答
z****e
发帖数: 54598
3
十有八九是引用没有释放
k******e
发帖数: 19
4
非大牛,做安卓多年时常遇到这个烂问题,MEMORY LEAK其实大多是MEMORY NOT
RELEASE SOON ENOUGH,就是留了太多暂时没用的东西在MEMORY里,比如说你用VIEW
PAGER,用FragmentPagerAdapter的话所有的Fragment都不释放,要是用
FragmentStatePagerAdapter那就可以用setOffscreenPageLimit选留几个Fragment。还
有一个常LEAK的就是IMAGE,要是不小心就放一堆BITMAP不RELEASE,立马死菜,最好就
是老实用现成的轮子,比如说PICASSO。出问题就老实地用工具查吧,总能找到症结的。

【在 s********k 的大作中提到】
: 大牛来讲讲,android里面memory leak一般都是什么导致的?
k******e
发帖数: 19
5
哦,忘记了还有这个很早以前安卓TEAM就一直在喊的不要LEAK CONTEXT,
http://android-developers.blogspot.com/2009/01/avoiding-memory-
这个算是官方的“小心注意事项“。

的。

【在 k******e 的大作中提到】
: 非大牛,做安卓多年时常遇到这个烂问题,MEMORY LEAK其实大多是MEMORY NOT
: RELEASE SOON ENOUGH,就是留了太多暂时没用的东西在MEMORY里,比如说你用VIEW
: PAGER,用FragmentPagerAdapter的话所有的Fragment都不释放,要是用
: FragmentStatePagerAdapter那就可以用setOffscreenPageLimit选留几个Fragment。还
: 有一个常LEAK的就是IMAGE,要是不小心就放一堆BITMAP不RELEASE,立马死菜,最好就
: 是老实用现成的轮子,比如说PICASSO。出问题就老实地用工具查吧,总能找到症结的。

s********k
发帖数: 6180
6
多谢各位大牛,引用一般大家都做成strong?还是softreference?
s********k
发帖数: 6180
7
我的意思一般什么用strong reference,就是那些singleton?哪些适合用
softreference?

【在 s********k 的大作中提到】
: 多谢各位大牛,引用一般大家都做成strong?还是softreference?
k******e
发帖数: 19
8
很少需要用到softreference, weakrefernce or phantomreference,一般是在你需要
cache一堆东西,比如说图片,的时候会要用到。但是强烈建议不要自己重写image
cache一类的东西,用Picasso或者Fresco什么的比较成熟的东西。有时候有人也喜欢用
weak reference去包装一个context object,比如说activity什么的以避免前面说的“
小心leak context”的问题。
但是很多时候这都是可以用别的办法达成,比如说那个weak reference wrap activity
,一般都是用async task的时候在task完成后的callback里要update UI,用这个避免
activity在async task没完成前就被释放了。但是这种做法是比较老式的做法,现在很
多新的pattern都会用个service(一般用intent service)去完成放在async task里的
任务,完成后可以用local broadcast manager发布个公告,在activity里面register
listener去收听,用这样的机制虽然好像复杂了很多,但是更加合理。
还有就是memory usage,只要你合理地用了persistence layer(一般就用sqlite+
content provider, or you can try realm.io or CouchBase Mobile),那你就不会占
用过多的内存,也就不太会出现out of memory的问题了。你看那个Cursor,都有个1MB
limit,就是很好的对内存用量的控制,让你不会过多地不必要地耗费内存。总之就是
只把你需要的东西给LOAD到内存里,不要的就及时释放(合理地利用CursorLoader,
CursorAdapter这一类的HELPER,他们都有帮助你自动释放不需要的那部分内存的功能
)。

【在 s********k 的大作中提到】
: 我的意思一般什么用strong reference,就是那些singleton?哪些适合用
: softreference?

s********k
发帖数: 6180
9
多谢,但是我看android官方文档强烈不建议用softreference做cache啊。

activity
register

【在 k******e 的大作中提到】
: 很少需要用到softreference, weakrefernce or phantomreference,一般是在你需要
: cache一堆东西,比如说图片,的时候会要用到。但是强烈建议不要自己重写image
: cache一类的东西,用Picasso或者Fresco什么的比较成熟的东西。有时候有人也喜欢用
: weak reference去包装一个context object,比如说activity什么的以避免前面说的“
: 小心leak context”的问题。
: 但是很多时候这都是可以用别的办法达成,比如说那个weak reference wrap activity
: ,一般都是用async task的时候在task完成后的callback里要update UI,用这个避免
: activity在async task没完成前就被释放了。但是这种做法是比较老式的做法,现在很
: 多新的pattern都会用个service(一般用intent service)去完成放在async task里的
: 任务,完成后可以用local broadcast manager发布个公告,在activity里面register

k******e
发帖数: 19
10
没错,就是因为很多人用SOFT REFERENCE等做CACHING TO AVOID MEMORY LEAK,所以别
人专门说别这样。所以说用PICASSO什么的处理图片CACHE(里面也就一类似LRUCACHE的
东西,不过除了MEMORY CACHE还有PERSISTENCE LAYER CACHE),其他什么的CACHE就像
文档说的用LRUCACHE什么的。
一般应该很少用到SOFTREFERENCE和WEAKREFERNCE等。

【在 s********k 的大作中提到】
: 多谢,但是我看android官方文档强烈不建议用softreference做cache啊。
:
: activity
: register

l**********n
发帖数: 8443
11
多线程吧。

【在 s********k 的大作中提到】
: 大牛来讲讲,android里面memory leak一般都是什么导致的?
1 (共1页)
进入Programming版参与讨论
相关主题
求教各位高手简单网络问题小公司的网站也要用memcached之类的cache吗?
想学习MUMPS and Cache我的一个客户案例(high traffic),请大家批判分析指点
问个C++编译器如何处理函数内的static 变量git的官方文档真叫一个烂
继续挖坑JAVA和C++persistence的选择
谁来推荐个好用的distributed memory cache哪位在Linux上用C++碰到过memory fragmentation吗?
redis set Time complexity: O(1) 怎么可能?C++ OO approach to use multi-dim array for HPC
科普贴,fusion IOgoogle 下面那个previous / next 怎么实现呢?
TeacherWei 的订票机的问题is it possible to design a zero miss rate cache?
相关话题的讨论汇总
话题: memory话题: leak话题: android话题: cache