gpt4 book ai didi

android - 相同的 ImageButtons 消耗大量内存

转载 作者:行者123 更新时间:2023-12-05 07:49:33 25 4
gpt4 key购买 nike

我最近才开始开发 Android 应用程序并面临内存问题。使用 Android Studio 的分配跟踪功能,我发现在多个 Activity 上显示的四个 ImageButtons 最有可能导致问题。分配跟踪结果显示几乎所有内存都被两种关于图像的方法使用。看: Allocation Tracking result

按钮的可绘制对象是大小约为 20 KB 的小图标,位于 drawable-nodpi 中。这样 Android 就不必对它们进行缩放。启动应用程序并在显示这四个 ImageButton 的两个 Activity 之间切换几次,就足以运行 OOM。这些 Activity 通常以特定的 launchMode 启动,方法是:

startActivity(new Intent(this, MyActivity.class));

Android 难道不应该销毁当前未使用的 Activity 以释放内存。相反,我得到了这样一个不断增加的内存使用图:Memory Usage

减少重复出现的 ImageButton 所需资源的最佳做法是什么?有没有办法让我在例如 onDestory() 中明确删除它们?

最佳答案

no-dpi 表示它不适用于密度缩放,而不是“它根本不缩放”。

如果您有 1 个像素的 no-dpi 可绘制对象并以 640x480 显示它(缩放为适合或覆盖),android 将解码资源为 640 * 480 * 4 字节 = ~1.2 MB。你的似乎大约是 55 和 35 MB,所以我假设你将它们缩放到整个屏幕,或者至少是大的。

一遍又一遍地开始一个新的 Activity 只会建立一个堆栈。由于您仍然在同一个任务堆栈中处于 Activity 状态(您只是在其之上添加),Android 不会仅仅破坏该 Activity ;这不同于转到不同的任务堆栈(阅读:启动不同的应用程序,将此应用程序置于后台)。

资源回收由 ImageButtonButton 类处理,因此您不需要显式处理它。如果您想手动执行此操作:

  • 不要在布局中膨胀可绘制对象(因此删除 drawableXXX=...src=...)
  • 使用Bitmap.decodeResource加载图片
  • 在这里你可以设置小尺寸和 BitmapFactory.Options
  • 完成后手动调用 Bitmap#recycle

如果你在onCreate中加载这些,在onDestroy中回收;如果您在 onStart 中加载这些,则在 onStop 中回收;如果您在 onResume 中加载它们,则在 onPause 中回收。

关于android - 相同的 ImageButtons 消耗大量内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37228109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com