首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LayerDrawable OutOfMemoryError

LayerDrawable OutOfMemoryError
EN

Stack Overflow用户
提问于 2013-06-25 00:02:42
回答 3查看 353关注 0票数 1

我需要将20+图像叠加在一起,以形成一个交互式地图,其中每个图层都可以打开和关闭。

为此,我决定使用LayerDrawable,但我一直在使用OutOfMemoryError。即使在我将Large Heap设置为true之后,它也可以加载大约8个图像,但如果超过8个图像,它仍然会抛出错误。

有没有一种方法可以将大量图像加载到LayerDrawable中而不出现这种错误,或者有没有更好的方法来做到这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-26 01:12:45

多亏了Luksprog的链接,我才能解决这个问题。

在将图像添加到Drawable[]之前,我使用inSampleSize加载了每个图像的较小版本。这大大减少了内存使用量。

票数 1
EN

Stack Overflow用户

发布于 2013-06-25 00:09:15

像这样的东西?

代码语言:javascript
复制
Resources r = getResources();
Drawable[] layers = new Drawable[20];
layers[0] = r.getDrawable(R.drawable.01);
layers[1] = r.getDrawable(R.drawable.02);
etc[...]
LayerDrawable layerDrawable = new LayerDrawable(layers);
testimage.setImageDrawable(layerDrawable);
票数 0
EN

Stack Overflow用户

发布于 2013-06-26 01:38:11

使用大堆标志只在honeycomb和更高版本上有效,并且它不能保证您将获得多少内存。你可以得到和以前一样的金额。

如果你想加载很多高质量的图像,你可以将它们缩小到屏幕的最大尺寸,或者使用非java的解决方案(例如openGL/andengine/lbgdx来显示内容)。

如果你选择java解决方案,你应该知道应用程序的最小设备堆是16MB。我希望从某种android API开始,它会更大一些,但这不是你可以假设的(尽管我还没有见过有这样限制的新设备)。

通常,您可以假设您的应用程序总是有足够的内存来容纳整个屏幕的位图。你甚至可以假设它总是比这个值多一倍,但仅此而已。

如果您选择本机其他解决方案,则仅限于设备RAM内存,但您需要自行释放内存。

请注意,无论您选择哪种解决方案,都会受到设备内存容量的限制。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17279912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档