来自未发布的活动的记忆

时间:2011-01-29 09:54:30

标签: android memory-leaks memory-management

我有一个应用程序,它有一些前台活动,还有一个更新一些小部件的服务。 问题是,由于进程仍然是服务,因此其他活动的内存(如果已打开)永远不会被回收。

that response from Roman Guy这似乎是正常的。但它是? android有多少时间保留未使用活动的资源?他们可以活几个小时?

如果活动泄露或简单无法回收,我怎么能轻易搞清楚?我已尝试使用AndroidMarket(FreeMemoryRecover)中的程序并将其清除,但我怀疑它会终止进程,然后重新启动服务......

任何帮助或建议都将受到高度赞赏。

注1:我使用HeapDump + Eclipse MAT进行了调查,我没有看到包含我的活动的奇怪引用

注2:我已经就这个问题提出了一些问题:

3 个答案:

答案 0 :(得分:1)

Android在不同状态下拥有多个活动的能力是一个设计原则,因为它允许用户快速切换活动,而无需有意识地关闭他们以前做过的任何事情。然后他们可以快速返回之前的活动。

如果Android需要暂停某个活动,并快速取消暂停,则需要保留活动资源。

如果内存是已终止活动的一部分,那么它就会被泄露(因为Linux内核将回收进程终止时使用的所有内存),这是非常不可能的,否则它将被主动使用或可能即将被使用。

这对你的记忆有什么影响?

答案 1 :(得分:1)

我会尝试以下方法:

启动你的应用程序播放以确保它已满载并使用尽可能多的内存。

然后按下主页按钮并启动导航器,打开techcrunch.com,lemonde.fr,youtube.com,dailymotion.com,从youtube发布视频,打开并播放愤怒的小鸟,最后但并非最不重要的是打开一个pdf文件。

之后,Android肯定需要内存。如果您的应用仍在那里,您可能会遇到问题,如果不是,那么一切都很顺利。

顺便说一句,在AndroidLand中成为一名优秀的公民时,请您好好关注!!

答案 2 :(得分:0)

  1. 请在下面的问题中查看我的评论。

  2. 有关Android内存泄漏的信息,请参阅Romain Guy's post

  3. 具体来说,请查看Launcher应用中对解决方案的评论。 (查看unbindDrawables代码here

  4. 尽可能使用Context.getApplicationContext()而非活动的背景。