因此,我阅读了Android O的可怕文档,它说,一旦应用程序在后台,服务将会死亡,我应该重构我的代码以使用Foreground服务或作业调度程序。Android O - 我的服务已经在后台运行了20多分钟了。它不应该被停止吗?
在我的应用程序中,我将照片上传到服务器,并且如果服务器返回500错误或没有网络连接,那么无论应用程序处于前景还是应用程序中,我都有一项服务每隔5分钟重试一次不。它采用了Timer
这样做
timer.scheduleAtFixedRate(new TimerTask() {
所以我升级我的手机到Android O和跑我的应用程序,把它的背景下,开设了10多个应用程序,并开始看logcat的。
现在,25分钟后,我的服务每5分钟继续运行计划的TimerTask
。
为什么它还活着,如果是这样的话,我重构我的应用程序是否有意义?
有一个类似的问题在这里: Android O - Background service limitation not working as expected
但得到的答复是太神秘,尤其是说,部分“过程可能会在任何时候终止。” - 这一直是Android的情况。这次更可能有不同程度的变化吗?
谢谢。对我来说是21+,所以JobScheduler工作得很好。是的,我想我正在泄漏TimerTask - 它已启动,并且再也不会再次触摸,直到我将其取消为止。但onDestroy现在还没有被召唤超过50分钟。 –
btw是RAM中的整个应用程序,如果服务/进程仍在运行,因为存在泄漏TimerTask,或者它只是这个组件被加载到内存中 –
@KR:“它开始并且再也不会再次触摸,直到onDestroy取消它“ - 好的,那么你不会泄漏它。 “但是onDestroy现在还没有被召唤50分钟以上” - 你的'targetSdkVersion'是什么?对于'targetSdkVersion'为26+,或者如果用户手动要求Android为其启用后台优化(仅适用于出现在“电池责任”列表中的应用程序),则大约1分钟的服务生命周期为'targetSdkVersion'。 “如果服务/进程仍在运行,则是RAM中的整个应用程序” - 默认情况下,是。 – CommonsWare