【问题标题】:Android App Memory Usage IssueAndroid 应用程序内存使用问题
【发布时间】:2018-01-10 18:19:50
【问题描述】:

我一直在开发一个简单的记忆游戏应用程序,我今天第一次在我的手机 LG V20 上对其进行了测试。但是,当我在手机上运行它时,android profiler 显示正在使用的内存量过大,导致应用程序在某些过渡点崩溃,我不知道为什么。这显示了应用程序打开和打开动画,第二个驼峰,和主页本身,开场动画只是让思想泡泡一次次消失 然后在模拟的 Nexus 5X 上运行相同的部分 然后穿越活动,在实体V20上 在模拟器上 这是每个活动的样子,level_select S1L1 这是我的第一个应用程序,所以我知道它没有得到很好的优化,即使模拟器上的较低数字也相当高。但是,我很困惑为什么该应用程序在物理电话上的点上占用的内存大约是模拟器上的 5 倍。以及为什么模拟器不显示图形正在使用的任何内存。任何帮助将不胜感激。

【问题讨论】:

    标签: android memory-management emulation


    【解决方案1】:

    这是我的两分钱。不同的手机具有不同的分辨率,因此具有不同的内存消耗。您可以采取一些措施来确保您的应用程序不会导致内存不足异常

    1. 确保使用 Glide、Picasso 或任何其他图像加载库在应用程序中加载图像。直接或通过布局加载图像会导致内存消耗突然激增
    2. 如果您使用动画,请确保在退出动画后清理它们,特别是如果它们涉及无限重复。
    3. 尝试使用较小的图像。一种可能的方法是将 .jpg 和 .png 转换为 .webp,它们的大小要小得多。
    4. 使用 Android Studio 进行内存转储,查看您的应用程序中是否存在任何内存泄漏。网上有很多文章可以指导您完成这些。例如link
    5. AsyncTask 多次导致上下文内存泄漏。尽量不要在异步任务中包含上下文,或者如果有,请确保它可供 GC 在操作结束时收集
    6. 即使内存泄漏非常小,它也会累积并最终导致内存不足异常。

    此外,您可以搜索 OutOfMemory 或内存泄漏以获取更多信息。

    【讨论】:

    • 感谢您的回复,我会调查这些事情!我只是有一个关于数字 1 的问题。现在我的所有图像都在可绘制文件夹中并正在从它们加载它们,我是否必须将所有图像托管在 imgur 之类的东西上才能通过 Glide 或毕加索。如果您能澄清一下,我不太确定您的意思是什么,我将不胜感激。
    • 不,你会将它们保存在可绘制文件夹中,但不是直接将它们作为<image_view>.setImageDrawable 或直接放在 xml 布局中,而是使用 Glide 库以编程方式从活动中加载它
    • 你会使用类似Glide.with(<activity>).load(<drawable>).into(<image_view>);
    【解决方案2】:

    这两款手机(Nexus 5X 和 LG V20)具有不同的分辨率,这意味着它们将使用不同的资源(我相信 XXHDPI 与 XXXHDPI)。

    如果您在应用中使用大量图片,则加载大量更高分辨率的图片可能会导致这种差异。

    尝试使用与您的手机分辨率相同的模拟器,看看这是否会导致您的问题,或者尝试将所有图像缩小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 2018-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      相关资源
      最近更新 更多