您好,匿名用户
随意问技术百科期待您的加入

有没有一个办法让Android启动GC

0 投票

被oom搞疯了。。。recycle什么的貌似不能把内存马上释放
System.gc(); 好像也不行。。。
有没有什么办法让系统迅速启动GC,释放内存?
求内存管理的一些技巧啊

用户头像 提问 2012年 12月1日 @ Taurus 上等兵 (303 威望)
分享到:

1个回答

0 投票
 
最佳答案

那个方法并不能即时开启内存清理,况且你还不能确定你想回收的对象是不是已经没引用了,如果有引用在,即时系统gc了,你的对象也不会被回收掉。
Bitmap对象分为java虚拟机上的内存和linux里的内存,真正的内存大户在linux上分配的部分,那里保存了图像的点阵信息。然后虚拟机里的引用主要保存图像大小等等Bitmap对象的大部分域(属性)。

recycle()方法也是通知虚拟机,该对象可以被回收,但是如果这个对象有被引用,那么无效的。
如果是Bitmap对象,那么你要确认这个对象没有在别的地方调用了,然后调用recycle之后null。但是如果你这个bitmap被控件引用,那么就要做一些处理。

Drawable d = view.getBackground();
// 如果是一个BitmapDrawable
Bitmap b = ((BitmapDrawable) d).getBitmap();

if (null != b && !b.isRecycle()) {
    b.recycle();
    b = null;
}
d.setBitmap(null);
d.setCallback(null);
用户头像 回复 2012年 12月1日 @ Twisted Fate 上等兵 (184 威望)
选中 2012年 12月1日 @Taurus
提一个问题:

相关问题

0 投票
1 回复 53 阅读
0 投票
1 回复 30 阅读
0 投票
1 回复 291 阅读
0 投票
1 回复 13 阅读
0 投票
0 回复 68 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...