Android - 确保在服务器的进程被操作系统杀死时释放Wakelock

Dav*_*vid 1 android android-service android-lifecycle android-wake-lock

FusedLocationProvider即使屏幕关闭,我也想让我为位置ping.为此,在我的服务中,我有一个PARTIAL_WAKE_LOCK,以保持CPU运行,并确保即使屏幕关闭,服务仍继续运行.

话虽如此,我知道Android OS会在需要内存时在后台扼杀服务/应用程序.因此,我的服务可以被杀掉.

发生这种情况时,onDestroy()Service不能保证被调用.如果是这种情况,我如何确保WakeLock被释放?

我打电话mWakeLock.acquire();onStartCommand,和onDestroy我打电话mWakeLock.release();

Y.S*_*Y.S 5

我如何确保WakeLock被释放?

根据文件:

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. 
Run Code Online (Sandbox Code Playgroud)

这意味着如果当前正在执行任何这些方法中的代码,那么在代码完成执行之前,该进程不会被终止(或者至少会被赋予非常高的优先级).

不过,短期回答你的问题是,有办法确保onDestroy()onPause()将被调用.onPause()但是,被调用的概率要大得多,所以你可以调查一下.还有一种方法,Application.onTerminate()您可能希望将其用于进一步研究.仅在模拟器上运行应用程序时才会调用此方法.

我不认为您需要担心内存泄漏(假设我们在这样的泄漏构成的同一页面上).当进程被终止时,内核将回收内存,而不是GC,因此在这种情况下不会发生内存泄漏.

编辑:

我已经确认,如果一个进程被杀死,必须释放获得的唤醒锁:

1. 如果持有它的应用程序或服务被杀死,android os会释放唤醒锁吗?.

2. 如果获取的进程被杀死,部分唤醒锁会发生什么?.

3. 粘合剂和死亡接受者.

4. 如何处理(孤儿)WakeLocks?.