我有一个基本活动(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() 强制它。因此,将答案中包含它的那个标记为正确,以便其他人更容易找到