首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android中的堆栈内存

Android中的堆栈内存
EN

Stack Overflow用户
提问于 2010-05-08 02:32:56
回答 1查看 1.6K关注 0票数 3

我正在编写一个应用程序,它有一个前台服务、内容提供者和一个绑定到服务并使用AIDL返回对象列表的活动前端。该服务确实可以工作并更新数据库。

如果我让活动打开4-8个多小时,并转到手机(Nexus One)设置下的“运行服务”部分,会显示异常大的内存使用量(~42MB)。

我想可能是有漏洞。当我检查堆内存时,我得到了堆大小:~18MB,~2MB已分配,~16MB可用。分析Eclipse MAT中的hprof似乎很好,这导致我推断内存在堆栈上泄漏。这有可能吗?如果是,我可以做些什么来阻止或调查泄漏?android的“运行服务”部分报告的内存使用量是否正确(我假设是正确的)?

另一个注意事项:当UI没有启动(只有服务在运行)时,我无法重现这个问题

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-08 03:54:33

我正在写一个应用程序,它有一个前台服务,内容提供者,以及一个绑定到服务并使用AIDL返回对象列表的活动前端。

如果这只是一个应用程序,那就去掉AIDL,去掉内容提供商。或者,至少不要自己使用它们--这些是供其他应用程序使用的。它们增加了您在自己的虚拟机中不需要的开销。

...which引导我推断堆栈上的内存正在泄漏。这有可能吗?

不怎么有意思。主应用程序线程堆栈非常小。其他线程的堆栈可能会变得更大,但如果您以这种方式占用了42MB,我会感到惊讶。

如果是,我可以做些什么来阻止或调查泄漏?

由于您已经做了测试sans UI的“尖峰解决方案”,并确定这是可以的,所以我将慢慢重新介绍UI,看看您什么时候开始遇到问题。一个可能的候选问题领域是从后台线程更新活动,因此您可以将其关闭并查看发生了什么。

由于您的问题不在堆本身,因此我猜测您的问题与位图或其他具有大量堆外RAM使用率的东西有关。你头像中的摄像头是这个方向的另一个线索。:-)确保你是recycle()-ing你的位图之类的,看看这是否有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2790826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档