【问题标题】:Android App taking up a lot of memoryAndroid App占用大量内存
【发布时间】:2014-06-04 04:38:42
【问题描述】:

在处理我的 Android 应用程序时,我最近检查了一个任务管理器以查看我的应用程序的内存消耗情况。

现在我的应用程序有两个由 AdMob 服务执行的广告横幅,然后是一个用于 Google 地图的界面片段。除此之外,我还有一个菜单,我在其中使用了一个容器,我在 Java 代码中向它添加了视图。与列表视图相比,我更喜欢它,因为它更轻巧,更容易构建我想要对视图执行的操作(并且我可以在添加/删除视图时使用 Android 原生动画系统)。

添加到容器的视图是通过基于条件的循环结构添加的。界面结构中的视图也有一个小的图像视图,使用了一个小的本地可绘制对象。

所有这些都以某种方式使我的应用程序占用了 44.8 MB 的内存,这与以前的开发数字相比显得异常高。这也是我第一次决定使用容器通过循环添加视图,而不是使用列表视图方法的适配器。

谁能马上告诉我为什么我的应用程序会立即占用这么多内存?这是我第一次使用所有这些组件:AdMob 横幅、谷歌地图和添加视图的容器。

我的 LogCat 没有显示任何效率低下的警告。只是好奇我是否做错了什么。如果有人有任何想法,我愿意提供任何源代码。

【问题讨论】:

    标签: java android memory-management


    【解决方案1】:

    我认为 44.8Mb 对于现代 Android 应用程序来说是很正常的。我的赌注是谷歌地图,因为它是非常消耗资源的库(CPU 方面和内存方面)。无论如何,您可以尝试从应用程序中依次删除每个组件,看看它如何影响内存占用。

    【讨论】:

    • 谢谢安德烈!我想我只是处于边缘,因为我仍然需要实现一项服务,该服务将收集大约 13 个小图标以仍然在应用程序中实现。出于某种原因,我记得读过应用程序不能超过 64 MB,但我可能错了。只是想确保我没有突破那个界限。我将尝试删除每个组件以查看是否有任何解决方案。再次感谢。
    • 64Mb 仍然是应用程序的正常内存使用量。您可以使用getMemoryClass 方法来了解特定设备的限制是什么。忽略提到 16Mb 的文档,我的应用显示 96Mb 是跨不同设备(运行 Android 3.0+ 的约 30k 设备)中最流行的内存类别。
    【解决方案2】:

    正如 Andrey 已经说过的,44.8Mb 对于 Android 应用程序来说并不算多。但是您可以使用 DDMS 来跟踪分配和堆更新,以准确查看正在占用的内存。看到这个:https://developer.android.com/tools/debugging/debugging-memory.html

    此外,我建议使用带有适配器的ListView,因为ListView 中的项目可以回收,这可以显着提高性能(参见this 教程)。

    【讨论】:

    • 我不知道这个工具!我将不得不利用它。我是一种逆向工程师,所以总是学习这些新工具总是有用的!谢谢拉菲!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    • 2016-05-04
    • 2014-05-11
    • 2011-02-27
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多