离开活动时的免费资源

时间:2013-11-18 21:25:29

标签: android android-activity

我想知道在Android中留下活动时是否可以释放资源?

我的应用程序有几个活动,其中一个非常耗费内存,因为它拥有大量高质量的图像。如果一个人去了这个活动堆,那么它就不会远离切线的内存不足。让它说occypies 85%的限制。但是 - 这是几个活动之一,也是唯一一个耗费内存的活动。其他的不是 - 它唯一的列表视图包含一些文本。

我并不是说我有内存泄漏但是为了安全起见,我想在离开这个包含图像的活动时释放资源。我无法弄明白该怎么做?

感谢!!!

3 个答案:

答案 0 :(得分:0)

根据onDestroy()方法中的资源情况,您应该free them up并允许收集这些资源。

答案 1 :(得分:0)

当垃圾收集器不再被系统使用时,应自动清除您的资源,但是您可以强制执行此操作,如下面的答案所示: https://stackoverflow.com/a/7009362/1222050

ImageView imageView = (ImageView)findViewById(R.id.my_image);
Drawable drawable = imageView.getDrawable();
if (drawable instanceof BitmapDrawable) {
    BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
    Bitmap bitmap = bitmapDrawable.getBitmap();
    bitmap.recycle();
}

此外,如果你要填充那么多内存,我建议我们考虑缩小我们位图的大小。您可以这样做:

Bitmap b = BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length)
profileImage.setImageBitmap(Bitmap.createScaledBitmap(b, 120, 120, false));

我有一个问题是你是如何开始下一个应用程序的活动/部分的?

答案 2 :(得分:0)

Drawable比Bitmap更广泛。 Drawable旨在表示图形系统可以呈现给显示器的任何内容。 Drawable的子类 - 例如ShapeDrawable或ColorDrawable - 不包含位图,因此不需要任何类型的手动内存管理。

BitmapDrawable包装Bitmap并包含对Bitmap的引用。 Bitmap是特殊的,因为Android在单独的堆中维护所有位图的像素数据,该堆与应用程序的其余部分分开管理。当Android垃圾收集器清理Bitmap对象时,它还会清除位图堆中的像素数据。但是你可以通过在Bitmap上手动调用recycle()来强制它发生,这会标记Bitmap无效并释放其像素数据。

Android为每个正在运行的应用程序分配固定大小的位图堆,并且您的应用可能会通过一次使用太多位图来耗尽其堆。这就是为什么如果您的应用程序广泛使用位图,一旦您知道不需要它们,您可能会从回收位图中受益。

更新:单独的位图堆适用于前Honeycomb版本的Android。从Honeycomb开始,位图堆与应用程序堆合并。