android“强制关闭”内存到底发生了啥
Posted
技术标签:
【中文标题】android“强制关闭”内存到底发生了啥【英文标题】:android "force close" what exactly happen with memoryandroid“强制关闭”内存到底发生了什么 【发布时间】:2013-02-05 16:59:58 【问题描述】:我的应用程序中的服务很少。应用程序在“android.uid.system”进程中运行。当我单击“强制关闭”时,日志会显示:
强制停止包 com.sec.ims.android uid=1000 强制停止服务 ServiceRecord42b9a948 ... .....
对于在我的应用程序下运行的每个服务,我都看到了这一点。根本没有 onDestroy() 调用。我想知道“强制关闭”之后android到底在做什么?停止整个进程或只是停止在应用程序下工作的所有服务、活动?
您知道这些服务创建的对象、静态变量和线程会发生什么吗? android 是否会清除此应用程序的所有内存堆?
【问题讨论】:
【参考方案1】:强制停止将终止运行应用程序的 VM(虚拟机)。所有对象、服务和活动都被杀死。
【讨论】:
【参考方案2】:这取决于您如何启动服务。
使用startService()
会覆盖由bindService()
管理的默认服务生命周期。
当使用startService()
时,您的服务生命周期在原始Activity 关闭时仍然存在。
在这两种情况下,Android 都会在需要内存时停止服务。
【讨论】:
【参考方案3】:我想。这个问题是低内存杀手运行问题。 当更高优先级的进程需要堆时,Android PF 会杀死活着的进程。
[ps]
如果您故意制造内存不足杀手的情况。 我建议您使用以下我的应用程序。 http://kyorohiro.blogspot.jp/2013/02/inside-kyorostress-1-produce-low-memory.html
如果这个问题是 Low memory Killer 问题,你的服务和进程将被重新启动。但是你的应用程序的数据在java堆中被删除了。
如果 PF 重新启动您的进程。然后调用 onCreate()。
服务生命周期由 onStartCommand 的返回值改变操作。检查android api参考。【讨论】:
以上是关于android“强制关闭”内存到底发生了啥的主要内容,如果未能解决你的问题,请参考以下文章