我有一个应用程序,它有一些前台活动,还有一个更新一些小部件的服务。 问题是,由于进程仍然是服务,因此其他活动的内存(如果已打开)永远不会被回收。
看that response from Roman Guy这似乎是正常的。但它是? android有多少时间保留未使用活动的资源?他们可以活几个小时?
如果活动泄露或简单无法回收,我怎么能轻易搞清楚?我已尝试使用AndroidMarket(FreeMemoryRecover)中的程序并将其清除,但我怀疑它会终止进程,然后重新启动服务......
任何帮助或建议都将受到高度赞赏。
注1:我使用HeapDump + Eclipse MAT进行了调查,我没有看到包含我的活动的奇怪引用
注2:我已经就这个问题提出了一些问题:
答案 0 :(得分:1)
Android在不同状态下拥有多个活动的能力是一个设计原则,因为它允许用户快速切换活动,而无需有意识地关闭他们以前做过的任何事情。然后他们可以快速返回之前的活动。
如果Android需要暂停某个活动,并快速取消暂停,则需要保留活动资源。
如果内存是已终止活动的一部分,那么它就会被泄露(因为Linux内核将回收进程终止时使用的所有内存),这是非常不可能的,否则它将被主动使用或可能即将被使用。
这对你的记忆有什么影响?
答案 1 :(得分:1)
我会尝试以下方法:
启动你的应用程序播放以确保它已满载并使用尽可能多的内存。
然后按下主页按钮并启动导航器,打开techcrunch.com,lemonde.fr,youtube.com,dailymotion.com,从youtube发布视频,打开并播放愤怒的小鸟,最后但并非最不重要的是打开一个pdf文件。
之后,Android肯定需要内存。如果您的应用仍在那里,您可能会遇到问题,如果不是,那么一切都很顺利。
顺便说一句,在AndroidLand中成为一名优秀的公民时,请您好好关注!!
答案 2 :(得分:0)
请在下面的问题中查看我的评论。
有关Android内存泄漏的信息,请参阅Romain Guy's post。
具体来说,请查看Launcher应用中对解决方案的评论。 (查看unbindDrawables代码here)
尽可能使用Context.getApplicationContext()
而非活动的背景。