0

我在https://stackoverflow.com/a/6779067/1236259线程中尝试了 hp.android 答案,但我的活动从未调用 onDestroy 方法

我有一个带有图像的 ListView,我通过以下方式调用其他活动:

ImageButton imageButtonSeeMap = (ImageButton)this.findViewById(R.id.imageButtonSeeMap);
imageButtonSeeMap.setOnClickListener(new OnClickListener() {....

从新活动中,我再次调用 ListView 活动,此时我得到了例外:java.lang.OutOfMemoryError:位图大小超出 VM 预算

列表视图中的图像是使用以下方法创建的:

thumb_u = new URL(lp.get(i).getImage());
            thumb_d = Drawable.createFromStream(thumb_u.openStream(), "src");

            imageViewPoi.setImageDrawable(thumb_d);

如何释放图像的内存?onDestroy 方法中的 unbindDrawables 永远不会被调用。

任何想法?

4

1 回答 1

1

图像在 android 中是野兽,所以 OutofMemory 异常是你可能不得不习惯的东西。这应该允许您的列表视图从网络获取图像,而不会使您的应用程序崩溃。

假设第二个代码块来自您的 ListView 的适配器 getView() 方法,请尝试:

try {
    thumb_u = new URL(lp.get(i).getImage());
    thumb_d = Drawable.createFromStream(thumb_u.openStream(), "src");
    imageViewPoi.setImageDrawable(thumb_d);
} catch (OutOfMemoryError e) {
    System.gc();
    thumb_u = new URL(lp.get(i).getImage());
    thumb_d = Drawable.createFromStream(thumb_u.openStream(), "src");
    imageViewPoi.setImageDrawable(thumb_d);
}
于 2012-06-28T22:08:13.283 回答