android – 为什么我的所有位图都上采样200%?

android – 为什么我的所有位图都上采样200%?,第1张

概述我的应用程序中存在严重的内存问题[1].为了研究这个问题,我在不同的州采取了我的应用程序的堆积.我看到一些位图占用了大量内存.我写了一个小工具[2],它将字节数组解码为 Windows位图文件(.bmp),这样我就可以看到位图并将它们与我res / drawable文件夹中的文件进行比较. 我发现我的所有文件都被上采样两次. 我首先检查了最大的一个:堆中超过9MB的字节数组缓冲区,它被解码为一个漂 我的应用程序中存在严重的内存问题[1].为了研究这个问题,我在不同的州采取了我的应用程序的堆积.我看到一些位图占用了大量内存.我写了一个小工具[2],它将字节数组解码为 Windows位图文件(.bmp),这样我就可以看到位图并将它们与我res / drawable文件夹中的文件进行比较.

我发现我的所有文件都被上采样两次.
我首先检查了最大的一个:堆中超过9MB的字节数组缓冲区,它被解码为一个漂亮的1920×1280图片,而原始的是一个960×640 png文件.
我尝试了第二大,超过3MB,曾经解码显示一个漂亮的754×1200图片,原始大小是……猜怎么着?一个不错的377×600 jpg文件.

是什么赋予了?

我在我的Android Manifest文件中启用了硬件加速(虽然我不确定我真的需要它,我只是使用一些基本的视图和活动).
我在GSM galaxy Nexus(yakju)上运行AndroID 4.0.2.我收到测试人员的反馈,他们的4.0.3 Nexus S上存在问题,但我还是无法检查他们的堆转储.

我试图在这里节省内存,如果AndroID将所有内容加倍,难怪应用程序很快崩溃,因为堆使用率过高(在我的情况下大约为64MB).我希望有一个理由和方法.

参考文献:

> OutOfMemoryError when loading activities
> How to actually see a Bitmap taken from an Android heap dump

解决方法 当您将图像放入res / drawable时,AndroID将假设它们的dpi为160,即它与将它们放入res / drawable-mdpi相同. galaxy Nexus是一个xhdpi设备,即它的(通用)dpi为320.为了补偿高分辨率显示器,AndroID将以200%对图像进行上采样.

解决方案很简单,只需将图像放在res / drawable-xhdpi中即可.然后声明的图像dpi将与您运行的显示匹配,AndroID将不会执行任何图像缩放.

有关详细信息,请参阅http://developer.android.com/guide/practices/screens_support.html.

总结

以上是内存溢出为你收集整理的android – 为什么我的所有位图都上采样200%?全部内容,希望文章能够帮你解决android – 为什么我的所有位图都上采样200%?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1149396.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存