我在我的应用程序[1]中遇到了严重的内存问题。为了调查这个问题,我在不同状态下获取了我的应用程序的堆转储。我发现一些位图占用了大量内存。我编写了一个小工具[2],将字节数组解码为Windows位图文件(.bmp),以便我可以查看位图并将它们与我在
我发现所有的文件都被上采样了两次。
我首先检查最大的那个:堆中的字节数组缓冲区超过了9MB,解码后变成了一个漂亮的1920x1280图片,而原始文件是一个960x640的png文件。
我尝试了第二大的,超过3MB,解码后显示出一个漂亮的754x1200图片,原始大小是...猜猜看?一个漂亮的377x600的jpg文件。
怎么回事?
我已在Android清单文件中启用了硬件加速(尽管我不确定是否真的需要,我只是使用了一些基本的视图和活动)。我正在GSM Galaxy Nexus(yakju)上运行原生Android 4.0.2。尽管我还没有检查过他们的堆转储,但我的测试人员告诉我该问题存在于他们的4.0.3 Nexus S上。
我在这里试图节省内存,如果Android将每个东西都翻倍,那么应用程序很快就会崩溃,因为堆使用量太高(在我的情况下约为64MB)。我希望有一个原因和一个方法来解决它。
参考文献:
res/drawable
文件夹中拥有的文件进行比较。我发现所有的文件都被上采样了两次。
我首先检查最大的那个:堆中的字节数组缓冲区超过了9MB,解码后变成了一个漂亮的1920x1280图片,而原始文件是一个960x640的png文件。
我尝试了第二大的,超过3MB,解码后显示出一个漂亮的754x1200图片,原始大小是...猜猜看?一个漂亮的377x600的jpg文件。
怎么回事?
我已在Android清单文件中启用了硬件加速(尽管我不确定是否真的需要,我只是使用了一些基本的视图和活动)。我正在GSM Galaxy Nexus(yakju)上运行原生Android 4.0.2。尽管我还没有检查过他们的堆转储,但我的测试人员告诉我该问题存在于他们的4.0.3 Nexus S上。
我在这里试图节省内存,如果Android将每个东西都翻倍,那么应用程序很快就会崩溃,因为堆使用量太高(在我的情况下约为64MB)。我希望有一个原因和一个方法来解决它。
参考文献: