【问题标题】:RAM increase - android serviceRAM 增加 - android 服务
【发布时间】:2014-02-06 15:28:28
【问题描述】:

我在我的 android 服务中进行了一些更改,例如将位图的哈希图声明为成员变量,并动态填充它。

我担心位图可能会占用大量 RAM。

如何确认更改后 RAM 使用量增加了多少。有什么工具可以检查吗?

如果有人以前在这方面工作过,请帮忙!

【问题讨论】:

  • 我认为 Eclipse 提供了一些类似的工具。此外,您实际上可以通过将 android:largeHeap="true" 添加到清单中来增加堆大小。它将提供您可以使用 SDK 实现的绝对最大堆大小,如果您想确定自己的堆大小,则必须使用 NDK。
  • 为了回答我自己的问题,我发现捕获堆转储并比较在两个不同点捕获的堆转储,使用内存分析工具 (MAT) 可以解决问题!请在开发者页面上阅读 - developer.android.com/tools/debugging/…

标签: android memory memory-management ram android-memory


【解决方案1】:

eclipse android sdk tools to detect the current heap allocation size,但是有更简单的方法可以知道当前堆大小:

只需在 logcat 中搜索“Grow heap”一词。每次应用程序的堆大小增加时 - 此日志都会打印到 logcat,同时指示当前的堆大小。

它看起来像这样:

02-22 11:20:57.040: I/dalvikvm-heap(5313): Grow heap (frag case) to 213.551MB for 3850256-byte allocation

一般来说,为避免位图分配过多的情况,并根据显示所需的比例类型自动分配位图,您应该使用Volley等库来为您处理缓存和远程服务器获取。

Google 疯狂的 Volley,并被 Google Play 应用程序用于处理服务器前的所有请求,并提供智能 ImageLoader 自动为您完成下载、以正确的样本大小解码、显示、内存缓存和存储缓存(如果指定)。

【讨论】:

  • @Tal Kanel:我可以在我的服务开始时看到“增长堆”日志,但是当按下某个键时动态位图创建时,我看不到这样的日志。
  • @girlDevelopIt: 当这个日志没有被打印时——这意味着堆大小保持不变
  • 好的。您假设每次分配时堆大小都会更改是不正确的。当应用程序被创建时 - 给它一个默认的堆大小,并且当系统检测到你的进程即将使用这个大小时 - 在一个 chank 中它会增长到类似 x2 的东西,依此类推
  • @girlDevelopIt:我相信不断增长的堆大小会以更清晰的方式反映您的内存使用情况。毕竟——如果堆大小保持不变——那么很确定你是“安全的”。如果这对你来说还不够 - 我建议你阅读这个 - developer.android.com/training/articles/memory.html
  • @girlDevelopIt:本文档描述了如何监控确切的堆大小使用情况:developer.android.com/tools/debugging/ddms.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-05
相关资源
最近更新 更多