当前位置: 首页 > 知识库问答 >
问题:

Android进程经常会产生logcat“已经死亡”的消息。

华凯捷
2023-03-14

我正在开发一个应用程序,它作为服务运行,并等待消息。在我查看了日志之后,我发现Android非常经常会杀死和重启许多进程!这不仅发生在我的app上,其他很多服务也是一样的。

我看不出这有什么原因,我的设备有足够的内存。我用运行Android4.0.4的索尼Xperia S进行测试。这是正常还是bug?

下面是日志的一部分,向你展示我的意思:

02-04 15:02:38.791 320 332 I ActivityManager:进程com.android.email(pid 32763)已死亡。02-04 15:02:38.791 320 332W ActivityManager:计划在5000ms内重新启动崩溃的服务com.android.email/.service.mailservice

....13分钟后:

02-04 15:15:32.601 320 694 I ActivityManager:进程com.android.email(pid 1453)已死亡。

共有1个答案

印嘉泽
2023-03-14

这很正常,操作系统经常这样做。

为什么?在Android memory manager确定它占用了太多的内存,或者另一个活动的应用程序/服务需要它之前,每个不活动的应用程序或服务都将保留在内存中。例如,当您在电子邮件应用程序中单击home按钮时。它会回到你重新打开应用程序时的确切位置。因为这个应用程序只是被暂停了,在内存中处于某种休眠模式。除非Android需要为其他任何事情分配内存,否则它会将其保留在那里。

确保操作系统不会杀死您的服务的一种方法是创建一个持久服务。

请使用AlarmManager和一个IntentService,因此您的服务不需要在内存中,除非它正在进行有意义的工作。这也意味着Android相当不可能在你处于内存时杀死你的服务,用户也不太可能因为认为你在浪费内存而杀死你的服务。

 类似资料:
  • 我在GGTS IDE上遇到了一些奇怪的异常。 我尝试了以下版本,但仍然有相同的问题 groov-grails-tool-suite-3.3.0.release-e3.8.2-macosx-cocoa-x86_64-installer.dmg groovy-grails-tool-suite-3.3.0.release-e4.3-macosx-cocoa-x86_64-installer.dmg 有

  • 使用Ubuntu 13.10和运行节点v0.10.0。我正在使用pty.jsv0.2.4生成一个程序(需要在交互式环境中运行)。该程序是用C编写的,并分叉子进程本身。 我已经编写了一个非常精简的C程序版本(我称之为“forktest”),它具有产生此问题所需的最小值,并包含以下内容: 我还整理了一个最小节点脚本,用coffeescript(test.coffee)编写,它运行程序,如下所示: 运行

  • 我们已经实现了延迟消息处理,有2个队列和x-死信-交换/x-消息-ttl,在queue1中的消息超时后,它将转到queue2。 现在是否有可能设置RabbitMQ,以便如果在处理来自queue2的消息时,我们将其拒绝为“死信”,那么它将自动转到queue3?我担心的是queue2中的消息已经标记为“已死”,有没有办法区分那些因为被拒绝而死的消息,并自动只将那些放在队列3中?

  • 问题内容: 在不让父进程等待子进程被杀死的情况下,我如何跟踪子进程的死亡? 我正在尝试一个客户端-服务器方案,其中服务器从客户端接受连接,并为它接受的每个连接派生一个新进程。 我忽略了SIGCHLD信号以防止僵尸创建。 上述情况下的问题是,如果子进程在函数中被杀死,则全局变量不会递减。 注意: 我正在寻找不使用SIGCHLD信号的解决方案…如果可能 问题答案: 通常,您编写一个调用pid 的处理程

  • 群集环境: Storm0.9.2 Zookeeper 3.4.6 Ubuntu 13.10

  • 我的程序每次要处理某件事情时都会分叉,在每个分叉进程中,我都分离一个线程,以便从分叉进程中记录统计数据:这个线程循环收集数据,但它没有停止这个循环的实际条件。 程序的输出证实了每一个线程都随其工艺而死 当我使用运行这个程序时,引起了一些疑问:当每个分叉进程死亡时,会显示一些令人毛骨悚然的输出(13534是分叉进程PID): 相同的错误(警告?)每个分叉进程死亡时的消息。