1

我有一个基本活动(SherlockActivity 子类),它加载的视图有一个最大尺寸的 ImageView。

<LinearLayout xmlns:p1="http://schemas.android.com/apk/res/android"
    p1:orientation="vertical"
    p1:minWidth="25px"
    p1:minHeight="25px"
    p1:layout_width="fill_parent"
    p1:layout_height="fill_parent"
    p1:id="@+id/linearLayout1">
    <ImageView
        p1:src="@android:drawable/ic_menu_gallery"
        p1:layout_width="fill_parent"
        p1:layout_height="fill_parent"
        p1:id="@+id/imageView"
        p1:scaleType="fitCenter" />
</LinearLayout>

Activity 唯一要做的就是加载一个 Bitmap 并将其分配给 ImageView

var iv = FindViewById<ImageView>(Resource.Id.imageView);
iv.SetBitmapImage(BitmapFactory.decodeFile(file....))

在我弄清楚如何在加载时调整位图大小(http://developer.android.com/training/displaying-bitmaps/load-bitmap.html)之前,每次加载活动时都会消耗 5MB 的内存,直到应用程序崩溃(现在没有,但我认为这个问题仍然存在)。即使我这样做:

  • 在家长活动中,点击按钮打开孩子
  • 在孩子(上面的图像视图)点击返回
  • 在父母,打开孩子
  • 在孩子中,点击返回
  • 等等等等,直到它崩溃(大约 4 次,因为每次都是 5MB!)

所以实际问题:当活动停止或被销毁时,我是否应该处理图像?我认为在 Java 或 C# 中,事情是经过 GC 处理的,所以我不需要这样做。我在 Activity 生命周期中遗漏了什么吗?

两位答案作者最终都提出了正确的答案(GC 做到了,但您可以使用 recycle() 强制它。因此,将答案中包含它的那个标记为正确,以便其他人更容易找到

4

2 回答 2

6

尝试调用recycle()位图。

http://developer.android.com/reference/android/graphics/Bitmap.html#recycle%28%29

于 2012-10-23T09:30:06.907 回答
1

加载大位图可能会导致 OutOfMemoryError。您可以在将图像加载到您的应用程序之前缩小图像;这将消耗更少的内存。你可以看这里:https ://stackoverflow.com/a/13011614/1117338

于 2012-10-23T09:27:55.137 回答