Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-背景图像占用太多内存_Android_Memory_View_Background - Fatal编程技术网

Android-背景图像占用太多内存

Android-背景图像占用太多内存,android,memory,view,background,Android,Memory,View,Background,在我的游戏中,我有3个活动:主菜单->子菜单->游戏屏幕。因此,当用户在游戏屏幕上玩游戏时,前两个活动处于非活动状态,但不会被破坏 每个布局中都有一个漂亮的背景图像。图像本身很小(40k),但在大屏幕上(比如Galaxy平板电脑),它需要几兆的内存。 从前两个活动中删除背景后,第三个活动中的内存使用量从18M降至13M 有没有办法保留背景并恢复所有这些浪费的内存?为什么不在启动新活动(C)时完成之前的活动。 然后您可以覆盖活动C中的onKeyDown方法以启动上一个活动(B)我建议您覆盖活动中的

在我的游戏中,我有3个活动:主菜单->子菜单->游戏屏幕。因此,当用户在游戏屏幕上玩游戏时,前两个活动处于非活动状态,但不会被破坏

每个布局中都有一个漂亮的背景图像。图像本身很小(40k),但在大屏幕上(比如Galaxy平板电脑),它需要几兆的内存。 从前两个活动中删除背景后,第三个活动中的内存使用量从18M降至13M


有没有办法保留背景并恢复所有这些浪费的内存?

为什么不在启动新活动(C)时完成之前的活动。
然后您可以覆盖活动C中的onKeyDown方法以启动上一个活动(B)

我建议您覆盖活动中的onPause()或onStop()。在那里,您可以释放后台(通过调用layout.setBackgroundDrawable(null))

我认为我的问题与您的问题相同,此解决方案将帮助您


您可以使用/res/drawable nodpi,背景图像只占内存大小的一半。

由于布局中的背景图像,我遇到了类似的问题。映像内存分配的正常大小应为高度*宽度*4字节(在默认模式ARGB_8888中)

如果您在显示活动时看到和分配了18MB,则肯定存在一些问题。检查是否将背景图像放置在可绘制文件夹中。在这种情况下,系统必须将该图像缩放到屏幕的特定密度,从而导致巨大的内存开销

解决方案:

  • 在每个可绘制文件夹(mdpi、hdpi、xhdpi…)中放置特定版本的背景图像,这样系统就不必执行任何缩放过程
  • 将背景图像放在一个名为“drawable nodpi”的特殊资源文件夹中。系统不会尝试缩放放置在此目录中的图像,因此只执行拉伸过程,分配的内存将是预期的
  • 更多信息在此


    希望这能有所帮助。

    我在考虑一个临时解决方案,你只需点击一下,当你在第三页时,删除前两页的背景,然后在返回的过程中恢复它们。启动C时,我如何完成B?我的意思是,我应该在代码中把C.finish()放在哪里?没人..在开始新活动之前,只需调用finish()。您始终可以添加对System.gc()的显式调用。还要确保您的活动本身不再引用背景图像。您好,这是我搜索了几天的解决方案。我缓存了图像,对它们进行解码,但除了这个,它们都不能工作。谢谢。只需将高分辨率图像添加到xxhdpi文件夹