【问题标题】:Android RAM usage and how to decrease it?Android RAM 使用量以及如何减少它?
【发布时间】:2014-05-04 15:08:28
【问题描述】:

我一直在编写这个显示公交线路时刻表图像的应用程序。目前有 32 行,每行都有自己的图像(由于格式和数据不足,无法使用文本,不得不妥协)。我让它从我服务器上的 PHP 文件中获取回显,并检索有关总线线路及其图像的数据,然后将这些数据和图像下载到内部存储并加载每条线路的按钮(动态布局)。

ImageViews 在创建时设置为 null,并且仅在单击按钮后才会填充。我注意到我的应用在启动时使用了大约 20MB 的 RAM。打开 10-15 行(10-15 图像加载到 ImageViews),RAM 使用量攀升至 60MB,然后崩溃(达到我设备的堆大小限制)。我知道图像密集型应用程序倾向于使用大量 RAM,我的计划是将其限制为每次仅一张图像(因此,一旦用户单击其他总线,其他总线将关闭,并且它们的图像视图设置回 null ),但我想知道的是,空的 ImageViews 会导致 RAM 大约为 20MB 吗?我的图像宽度为 320 像素,高度为 200 到 1500 像素(我知道,这很多),但我已将它们设置为灰度并对其进行压缩(图像大小从 50kb 到 150kb)。

我的应用程序的 APK 大小为 710kb,安装后的应用程序约为 3MB,数据总计为 7.5MB。

所以,澄清一下,我的问题是:

*1) 空的 ImageView 也会导致高 RAM 使用吗?

2) 如果是,我是否应该在用户单击按钮时动态创建一个 ImageView 并填充它,而不是在启动时创建它们时的当前方法?

3) 多维变量(主要是字符串,35 维的 6 个字符串)是否也会导致 RAM 使用率过高?其中大多数长度约为 10 个字符。

4) 我可以在 Android Studio 上使用任何工具来帮助我定位可能的内存泄漏吗?

5) 非全局变量是否会在 ie.函数返回了一个值,还是我需要在完成它们后手动将它们设置为 null?

6) 在开发应用程序时,通常有哪些好的做法可以减少 Android 上的 RAM 使用量?*

抱歉,这里的技术不是很专业,我不是专业程序员或其他任何东西,这更多是我的爱好,我正在尝试在这里学习更多。感谢您的阅读。

显示我的应用功能的图片:

所有公交线路都折叠了

点击按钮后,会显示该线路的公交时刻表

【问题讨论】:

    标签: android image memory memory-leaks ram


    【解决方案1】:

    *1) 空的 ImageView 是否也会导致高 RAM 使用率?

    可能不会。占用大量空间的是位图本身,而不是 ImageView。请记住,内存中的位图不会被压缩,因此您需要考虑的不是文件大小,而是像素数。

    3) 可以多维变量(多为字符串,6个字符串加35个) 尺寸)是否也会导致高 RAM 使用率?他们中的大多数人在 10 岁左右 字符长。

    可能不会。

    4) 有什么工具可以在 Android Studio 上使用 帮我找出可能的内存泄漏?

    您应该使用 Android 调试监视器(工具菜单 > Android > 监视器(包括 DDMS)。它有一个内存堆查看器,可以向您显示什么是大问题。它可以采用 HPROF 格式的堆转储,您也可以使用其他 Java 堆查看工具进行分析。

    5) 非全局变量是否会在 ie. 函数返回了一个值还是我需要手动将它们设置为 在我处理完它们后返回 null?

    除非您做一些奇怪的事情,否则一旦这些变量超出范围,局部变量使用的内存就有资格进行垃圾回收,因此要回答您的问题,您无需将它们设置为 null。

    【讨论】:

      【解决方案2】:

      在我的情况下,我只将 1 张图片放到 drawable,所以应用程序的 RAM 增加了很多。
      然后,我将图像放到每个drawable-...pdi 文件中,RAM 大小减小

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-07
        • 2013-11-02
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        • 2012-12-07
        相关资源
        最近更新 更多