【问题标题】:another 'bitmap size exceeds VM budget' [duplicate]另一个“位图大小超出 VM 预算”[重复]
【发布时间】:2012-09-24 02:46:17
【问题描述】:

可能重复:
Android: Strange out of memory issue while loading an image to a Bitmap object
OutOfMemoryError: bitmap size exceeds VM budget :- Android

我知道已经有很多关于这方面的话题,但无论我尝试什么似乎都不起作用。

我尝试了几种 onDestroy 技巧,包括回收位图、将其设置为 null 等。 不确定我的代码是否与其他情况有任何不同?好像是这样的... 我正在使用 TouchImageView 扩展,所以我可以使用捏缩放,所以也许这使它更复杂?

无论如何,这是我的代码。谁能指出我该如何解决这个问题(顺便说一句,无需缩小位图)?

    public class PageActivity extends Activity {

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.page);

            Intent parent = getIntent();
            int pagenumber = parent.getIntExtra("pagenumber", 1);
            int resID = getResources().getIdentifier("page"+pagenumber , "drawable", getPackageName());

            TouchImageView img = new TouchImageView(this);
            Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resID);
            img.setImageBitmap(bitmap);
            img.setMaxZoom(4f);

            LinearLayout rootview = (LinearLayout) findViewById(R.id.RootView);
            rootview.addView(img);
        }
    }

【问题讨论】:

  • 我注意到 onDestroy() 没有开始调用,因为我使用的是 tabhost。因此,我尝试在其中放置一个 ontablistener 并以这种方式手动调用 ondestroy,但是当活动尚未开始时它会被调用,因此当我将 recycle() 内容放入其中时,我尝试使用回收的位图:S
  • 我已经想出了一个很好的方法来阻止内存泄漏,那么这个主题可以重新打开以便我发布它吗?我认为其他人可能会从中受益。

标签: android bitmap out-of-memory


【解决方案1】:

正如您所说,您已经使用了从裁剪到回收的所有内容,现在也尝试使用 Wea​​kReferences。

如果这也没有帮助,那么您的代码中可能存在内存泄漏。

请查看我对同一问题的回答:bitmap size exceeds Vm budget error android

这是一个通用的答案,请尝试我提到的所有方法。其中一个应该适合你:)

谢谢。

【讨论】:

  • 弱引用技巧似乎不起作用
  • 在创建位图时尝试使用 BitmapFactory.Options 中的所有选项。还可以考虑将位图缩放到更小的尺寸,因为它可能会占用太多内存。
  • 我试过了,但图像看起来像垃圾。
  • 你检查过你的代码是否有内存泄漏吗?
  • 是的。当我单击 mijn tabhost 中的选项卡时,我看到外部越来越大。在 4 个页面活动之后,它在内存中加载了 4 个图像并且它崩溃了
猜你喜欢
  • 2012-08-19
  • 2011-07-27
  • 2012-08-12
  • 2012-11-12
  • 2011-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多