我有一个长时间运行的服务,响应多个BroadcastReceivers
(在代码中创建,而不是清单)。大多数情况下服务运行良好,但不时会以某种方式停止运行(BroadcastReceivers
停止工作) - 我想系统会以某种方式暂停它(当我查看设备上正在运行的进程时可以清楚地看到服务仍在“奔跑”)。
我不知道服务暂停的正确理由,但我想知道在这些情况下是否调用了onDestroy()
方法,或者是否有机会以某种方式处理此服务。
我认为onDestroy()
未被调用,因为该服务在“正在运行的进程”选项卡中仍然可见。我也让服务返回START_STICKY
标志,这样系统应该在因内存原因被杀死时重新启动它。此外,如果以某种方式“暂停”,是否可以为此创建WakeLock
?
我知道最好的解决方案是将所有BroadcastReceivers
放入清单并创建一个从他们的onReceive()
方法调用的一次性服务。但是我选择采用长时间运行的方式,因为初始化阶段非常密集,最好只初始化一次。
答案 0 :(得分: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