我正在编写一个应用程序,该应用程序具有一个前台服务,内容提供程序和一个活动前端,该前端绑定到服务并获取使用AIDL的对象列表。该服务确实工作并更新数据库。Android中的堆栈内存
如果我将该活动保留4-8小时,并进入手机设置下的“正在运行的服务”部分(Nexus One),则显示正在使用的异常大量内存(〜42MB)。
我觉得有泄漏。当我检查堆内存时,我得到堆大小:〜18MB,〜2MB分配,〜16MB空闲。在Eclipse MAT中分析hprof似乎很好,这导致我理论化了内存泄漏到堆栈上。这甚至有可能吗?如果是这样,我能做些什么来阻止或调查泄漏?在android的“正在运行的服务”部分报告的内存使用情况甚至正确(我认为是)?
另注:我已经无法重现此问题时,UI不起来(只有在服务运行)
服务真的是应用程序的主力,活动只是一个窗口,看看发生了什么。我的印象是真正将数据传回活动的唯一方法是绑定到服务并使用AIDL并对对象进行包裹。如果有更好的方法可以让我知道吗? 我曾怀疑图像可能在早期出现问题,并已退回到一个平铺背景PNG进行测试,大约是40KB。所以我不认为是这样。我有几个使用图层drawable(按钮,进度条)的UI元素,我不知道这些堆外效率如何。 – Matt 2010-05-07 20:28:53
我最近尝试在应用程序中使用Timer的leu中的ScheduledExecutorService,如果我不正确地关闭它,线程池是否可以无限期地留在内存中?我将尝试恢复到基于计时器的解决方案,看看这是否会改变任何事情。 – Matt 2010-05-07 20:32:19
谢谢你顺便回答,我担心没有人能够帮助这个奇怪的问题。 – Matt 2010-05-07 20:34:10