【问题标题】:android "force close" what exactly happen with memoryandroid“强制关闭”内存到底发生了什么
【发布时间】:2013-02-05 16:59:58
【问题描述】:

我的应用程序中的服务很少。应用程序在“android.uid.system”进程中运行。当我单击“强制关闭”时,日志会显示:

强制停止包 com.sec.ims.android uid=1000 强制停止服务 ServiceRecord{42b9a948 ... .....

对于在我的应用程序下运行的每个服务,我都看到了这一点。根本没有 onDestroy() 调用。我想知道“强制关闭”之后android到底在做什么?停止整个进程或只是停止在应用程序下工作的所有服务、活动?

您知道这些服务创建的对象、静态变量和线程会发生什么吗? android 是否会清除此应用程序的所有内存堆?

【问题讨论】:

    标签: android memory service heap-memory forceclose


    【解决方案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参考。

        【讨论】:

          猜你喜欢
          • 2011-12-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-06
          • 1970-01-01
          相关资源
          最近更新 更多