即使屏幕关闭,我希望我的FusedLocationProvider
ping地点。为此,在我的服务中,我有一个PARTIAL_WAKE_LOCK
,以保持CPU运行,并确保即使屏幕关闭,服务也会继续运行。
话虽这么说,我知道Android OS会在需要内存时在后台扼杀服务/应用程序。因此,我的服务可以被终止。
发生这种情况时,onDestroy()
中的Service
无法保证被调用。如果是这种情况,我如何确保WakeLock被释放?
我在mWakeLock.acquire();
中呼叫onStartCommand
,在onDestroy
呼叫mWakeLock.release();
答案 0 :(得分:5)
如何确保WakeLock被释放?
根据docs:
If the service is currently executing code in its onCreate(),
onStartCommand(), or onDestroy() methods, then the hosting process will be a
foreground process to ensure this code can execute without being killed.
这意味着如果当前正在执行任何这些方法中的代码,那么在代码完成执行之前,该进程不会被终止(或者至少会被赋予非常高的优先级)。
但是,对您的问题的简短回答是否方式确保 onDestroy()
或onPause()
被调用。但是,onPause()
确实有更大的被调用概率,所以你可以调查一下。还有一种方法Application.onTerminate()
,您可能希望将其用于进一步研究。只有在模拟器上运行应用程序时才会调用该方法。
我认为您不必担心内存泄漏(假设我们在这样的泄漏构成的同一页面上)。当进程被终止时,内核将由内核回收,而不是由GC回收,因此在这种情况下不会发生内存泄漏。
修改强>
我已经确认,如果某个程序被杀,则必须释放获得的唤醒锁:
1。 Does the android os release a wakelock if the app or service holding it is killed ?。
2。 What happens with the partial wake lock if the process that acquires is killed ?。