Android RAM的使用方法以及如何减少它?

时间:2014-05-04 15:08:29

标签: android image memory memory-leaks ram

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

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

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

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

* 1)空的ImageViews也可以导致高RAM使用率吗?

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

3)多维变量(主要是字符串,6个字符串,35个维度)是否也会导致高RAM使用率?大多数都是10个字符左右。

4)我可以在Android Studio上使用哪些工具来帮助我找到可能的内存泄漏?

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

6)在开发应用程序时,通常会有哪些减少Android使用率的良好做法?*

很抱歉在这里不是很技术,我不是一个专业的程序员或任何东西,这更像是我的一个爱好,我想在这里学习更多。谢谢你的阅读。

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

所有公交线路都已折叠

enter image description here

点击按钮后,它会显示该线路的公交时刻表 enter image description here

2 个答案:

答案 0 :(得分:6)

  

* 1)空的ImageViews也可以导致高RAM使用率吗?

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

  

3)可以是多维变量(主要是字符串,6个字符串,35个   尺寸)导致高RAM使用率?他们中的大多数都在10左右   人物很长。

可能不是。

  

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

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

  

5)非全局变量一旦被ie自动销毁。   函数已返回值或我是否需要手动将它们设置为   我完成了它们之后是否为空?

除非你做了一些奇怪的事情,否则一旦这些变量超出范围,本地变量使用的内存就有资格进行垃圾收集,所以为了回答你的问题,你不需要将它们设置为null

答案 1 :(得分:0)

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