android垃圾回收,Android中的垃圾收集器

问题

我看过很多Android答案,建议在某些情况下调用垃圾收集器。

在进行内存耗尽操作之前,在Android中请求垃圾收集器是一个好习惯吗?如果没有,如果我得到一个OutOfMemory错误,我应该只打电话吗?

在使用垃圾收集器之前还有其他我应该使用的东西吗?

#1 热门回答(132 赞)

对于3.0之前的版本蜂窝:是的,请致电System.gc()。

我试图创建Bitmaps,但总是得到"VM内存不足错误"。但是,当我第一次致电System.gc()时,没关系。

在创建位图时,Android经常因内存不足而失败,并且不会先尝试垃圾回收。因此,callSystem.gc(),你有足够的内存来创建位图。

如果创建对象,我认为如果需要,我会自动调用System.gc,但不能创建位图。它失败了。

所以我建议在创建位图之前手动调用System.gc()。

#2 热门回答(113 赞)

一般来说,在存在垃圾收集器的情况下,手动调用GC是不合时宜的做法。 GC围绕启发式算法进行组织,这些算法在放置到自己的设备时效果最佳。手动调用GC通常会降低性能。

偶尔,在一些相对罕见的情况下,人们可能会发现某个特定的GC出错了,然后手动调用GC可能会改善性能。这是因为实际上不可能实现"完美"GC,它将在所有情况下以最佳方式管理内存。这种情况很难预测,并取决于许多微妙的实施细节。 "良好实践"是让GC独立运行;手动调用GC是一个例外,只有在实际性能问题得到适当见证后才能设想。

#3 热门回答(25 赞)

如果我们没有正确处理位图,Android应用程序中的内存很常见,问题的解决方案就是

if(imageBitmap != null) {

imageBitmap.recycle();

imageBitmap = null;

}

System.gc();

BitmapFactory.Options options = new BitmapFactory.Options();

options.inSampleSize = 3;

imageBitmap = BitmapFactory.decodeFile(URI, options);

Bitmap scaledBitmap = Bitmap.createScaledBitmap(imageBitmap, 200, 200, true);

imageView.setImageBitmap(scaledBitmap);

在上面的代码中刚刚尝试回收位图,这将允许你释放已用的内存空间,因此可能不会发生内存不足。我试过它对我有用。

如果仍然遇到问题,你也可以添加这些行

BitmapFactory.Options options = new BitmapFactory.Options();

options.inTempStorage = new byte[16*1024];

options.inPurgeable = true;

最佳设计是:

通过显示的if / recycle / nullcode释放不再需要的所有位图。 (制定方法来帮助解决这个问题。)

System.gc();

分配新的位图。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值