【问题标题】:Allocated heap memory and drawables of different size分配的堆内存和不同大小的可绘制对象
【发布时间】:2011-07-04 21:31:01
【问题描述】:

我正在跟踪我的应用程序上分配的堆内存,最大为 15.5MB。其中大部分来自位图。我有一个名为“drawable”的文件夹,我将所有位图都放入其中,因此无论屏幕大小如何,所有设备都会加载相同的位图。测试设备是Desire HD。我的问题是:当一个小屏幕设备运行我的应用程序时,它会分配相同数量的内存吗? (请记住,我没有用于小屏幕设备的更小的位图)。

我怀疑的原因是,无论它调整到什么大小,它都来自同一个资源。例如,我发现绘制 400*800 位图和绘制 300*600 位图消耗的内存量不同,即使我拉伸它们以填满屏幕。

如果我为小屏幕设备使用更小的位图,我认为它会分配更少的内存。只是我有 300 个位图,我试图避免不得不复制和减小 300 个位图大小的痛苦。

另一个问题:我在某处读到最小的最大堆大小为 16MB。这仍然是真的吗?

【问题讨论】:

    标签: android


    【解决方案1】:

    您的位图将根据inDensityinTargetDensity 自动调整大小。 这当然比拥有同一个位图的多个版本要慢,但在您的情况下,它可能是最佳选择。

    【讨论】:

    • 我知道它们会被调整大小。实际上,当我在画布上绘制它们时,我会自己调整它们的大小。问题是:它会在小屏幕设备上消耗更少的内存吗?我怀疑的原因是,无论它调整到什么大小,它都来自同一个资源。例如,我发现绘制 400*800 位图和绘制 300*600 位图消耗的内存量不同,即使我拉伸它们以填满屏幕。
    • 在绘制位图时调整位图大小是一个非常糟糕的主意。如果画得更小,它会很慢并且浪费内存。您应该在加载它时调整它的大小,使其与您绘制它的大小完全相同,并消耗与绘制所需的内存一样多的内存。
    • 我在绘制位图时不调整大小,我调整一次大小,然后再绘制。
    • 这不是问题。我在问一个与我的特定代码无关的问题。给定以下假设: 1. 在所有设备上使用相同的位图。 2. 手动缩放位图以适应所有屏幕尺寸。问题是:我的位图在小屏幕设备上会比在大屏幕设备上消耗更少的内存吗?
    • 是的...以防万一它做得对。 (位图不是按大小缩放,而是按像素密度缩放)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 2016-11-19
    相关资源
    最近更新 更多