因此,我閱讀了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