android - 释放附加到 ImageView 的位图

标签 android xamarin.android

我有一个基本 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() 强制它。所以标记正确答案中有它的那个,这样更容易找到其他

最佳答案

关于android - 释放附加到 ImageView 的位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13027209/

相关文章:

c# - 没有互联网的移动通知(仅限本地网络)

c# - 在文件共享 Xamarin.forms 中获取原始文件名

java - RecyclerView 项目选择抛出错误

android - 广告暴徒还是 iAd?

android - ListView 在 2.x 上改变颜色

java - Android 如何监听音量按钮事件?

xamarin - Xamarin Forms 中的 Android 占位符\提示文本

android - SetContentView() 错误 : Android. Views.InflateException

android - 未为目标 ="_blank"调用 WebView + WebChromeClient 方法 onCreateWindow

c# - System.ObjectModel 警告 Xamarin 无法在 Android 上运行