2014-01-28 50 views
1

在我的IntentService類的onHandleIntent中,我創建了包含應在20秒後完成的runnable的句柄。不幸的是,我的服務睡眠或在這段時間之前被摧毀。 我也嘗試過CountDownTimer,但我有同樣的問題。 有人有任何想法可以讓onHnadleIntent等待嗎?謝謝!使IntentService不會睡眠,直到它執行handler.postDelayed可運行

這是代碼:

public class MyService extends IntentService { 
    //... 
    @Override 
    protected void onHandleIntent(Intent workIntent) { 
     Handler handler = new Handler(); 
     handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      Log.i("20 seconds later","I am here"); 
      } 
     }, 20000); 
     //... 
    } 
    //... 
} 

回答

4

不要使用IntentService。它不是爲你的場景設計的。使用常規Service。把你的代碼放在onStartCommand()。在run()方法的底部,在Service實例上調用stopSelf()將其關閉。

+1

非常感謝。 –

+0

謝謝lottttttt !!! – prasanthMurugan

+0

這是相同的問題,對嗎? https://stackoverflow.com/questions/36949239/handler-postdelayed-is-not-working-in-onhandleintent-method-of-intentservice 爲什麼,你知道嗎?基本上,我的應用程序仍處於前臺,屏幕仍在運行,但仍然無法工作......當IntentService可用時,爲網絡任務創建新的HandlerThread聽起來像是過度殺傷,除非有一個堅實的理由。 Pls ... –

1

您需要停止onHandleIntent返回,直到Runnable完成。這可以通過使用CountdownLatch來實現,CountdownLatch在onHandleIntent方法結束時等待,並在run方法結束時釋放。

注意:這將導致intent服務不處理您發送它的其他Intents,直到前一個完成(20秒後)。

您可能還想在onHandleIntent開始時獲得部分喚醒鎖,並在最後釋放它。

+0

謝謝你的迴應!我不知道它是否適用於我,我沒有嘗試。我希望它能幫助另一個人。 –