我有一个基本 Activity (SherlockActivity 子类),它加载的 View 有一个最大尺寸的 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) 之前,每次加载 Activity 时都会占用 5MB 内存,直到应用程序崩溃(现在不会了,但我认为这个问题仍然存在那里)。即使我这样做了:
- 在家长 Activity 中,点击按钮打开 child
- 在 subview 中(上图)点击返回
- 在 parent 中,开放 child
- 在 child 中,点击返回
- 等等,直到它崩溃(大约 4 次左右,因为每次都是 5MB!)
所以实际的问题是:当 Activity 停止或被销毁时,我是否应该处理图像?我认为在 Java - 或 C# 中 - 事情是 GC'ed,所以我不需要这样做。我是否遗漏了 Activity 生命周期中的某些内容?
两个答案的作者最终都得出了正确的答案(GC 做到了,但你可以用 recycle() 强制它。所以标记正确答案中有它的那个,这样更容易找到其他
最佳答案
尝试在位图上调用 recycle()
。
http://developer.android.com/reference/android/graphics/Bitmap.html#recycle%28%29
关于android - 释放附加到 ImageView 的位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13027209/