【问题标题】:Application.onCreate called more than once多次调用 Application.onCreate
【发布时间】:2012-10-15 20:40:59
【问题描述】:

我有一个应用程序,我在其中扩展 Application 类并覆盖 onCreate 方法。
在我的 onCreate 中,我使用 AlarmManager 安排服务每 5 分钟运行一次。
在日志中,我看到 onCreate get 在一段时间后再次被调用,就好像应用程序已重新启动/重新创建一样。
这最终导致我的服务与第一次执行不同步。
有没有办法防止这种情况发生并保证应用程序的 onCreate 中的代码只执行一次(当然假设应用程序没有被用户明确关闭)?

谢谢

【问题讨论】:

  • 你能再具体一点吗?如果您更改设备的方向,是否会发生这种情况?
  • 我猜方向改变了好几次,但这是当应用程序在后台时,这应该影响活动,而不是应用程序。在日志中我在超过 20 分钟的时间内看到了几次,所以我猜它与配置无关......

标签: android


【解决方案1】:

Application 上的onCreate() 被称为启动进程的一部分。如果您在日志中看到它被多次调用,那是因为您的进程在两次运行之间被终止。

【讨论】:

  • AlarmManager 重启了吗?如何防止/检测此类情况,以便在定义的时间间隔内保持正确的服务执行?
  • @Oren:“AlarmManager 正在重新启动它吗?” ——因为我无权访问你的日志,所以我无法回答这个问题。您应该能够根据日志时间戳来判断。 “如何防止/检测此类情况,以便在规定的时间间隔内保持正确的服务执行?” -- 不要从onCreate()Application 启动服务。或者,跟踪您的服务何时运行(例如,SharedPreferences 中的 lastRunTime 值)并且仅在您确定您的服务尚未运行时才启动 AlarmManager
  • 从日志中我看到,当我在一段时间后进入主要活动时,重新创建了进程(不同的 pid)——这意味着在某些情况下重新创建进程以打开活动。我不想使用 SharedPreferences,因为这意味着我将不得不维护许多用例(例如启动、从任务管理器关闭等)
  • @Oren:你无法阻止onCreate() 被调用。你不能阻止你的进程被终止。
  • 我明白了。我要问的是,由于android的进程管理,是否有一种方法可以调用AlarmManager来安排服务不会被多次调用......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-01
  • 1970-01-01
  • 2018-10-19
  • 2013-03-31
  • 2019-12-16
  • 2015-01-16
  • 2017-12-17
相关资源
最近更新 更多