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();
我如何确保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会释放唤醒锁吗?.
3. 粘合剂和死亡接受者.
| 归档时间: |
|
| 查看次数: |
1161 次 |
| 最近记录: |