0

我有一个长期运行的服务,它响应多个BroadcastReceivers(在代码中创建,而不是清单)。大多数时候服务运行良好,但有时它会以某种方式停止(BroadcastReceivers停止工作) - 我猜系统会以某种方式暂停它(当我查看设备上正在运行的进程时,我可以清楚地看到服务仍在“运行”)。

我不知道暂停服务的正确原因,但我想知道在这些情况下onDestroy()是否调用了该方法,或者是否有机会以某种方式处理这个问题。

我认为onDestroy()没有被调用,因为该服务在 Running processes 选项卡中仍然可见。我还让服务返回START_STICKY标志,因此系统应该在它因内存原因被杀死时重新启动它。此外,如果它以某种方式“暂停”,是否可以创建一个WakeLock不发生这种情况?

我知道最好的解决方案是将所有内容放入清单并创建一个从他们的方法BroadcastReceivers调用的一次性服务。onReceive()但是我选择了长时间运行服务的方式,因为初始化阶段非常密集,最好只初始化一次。

4

1 回答 1

0

onDestroy()只会在服务因资源不足而被终止或您明确停止服务时被调用。

当您的手机空闲时(通常在屏幕关闭时),该服务可以“暂停”,因为 CPU 停止。要使服务始终运行,您应该使用PowerManager.PARTIAL_WAKE_LOCK - 但要明智地使用它,因为它不会停止 CPU 并因此耗尽电池。你永远不应该让你的应用程序一直运行。只需做您需要持有WakeLock然后释放它的事情。

http://developer.android.com/reference/android/os/PowerManager.html

http://developer.android.com/reference/android/os/PowerManager.WakeLock.html

您可以使用 AlarmManager 定期“唤醒”您的应用程序并执行某些操作。

http://developer.android.com/reference/android/app/AlarmManager.html

于 2013-02-07T11:06:32.140 回答