2012-10-29 74 views
1

如何創建一個AsyncTask,它在固定的時間間隔後繼續運行。異步重複計劃任務

例如,每隔5分鐘從服務器獲取數據,並通知通知以向調用者線程收到數據。我在論壇上搜索,但找不到多少。什麼到目前爲止,我已經收集是

1)UI線程執行

後打電話AsyncTask

2)UI線程訪問onPrExecute執行

3)OnPostExecute的UI線程訪問之前,我不需要向用戶顯示任何進度更新。此外,該任務將在應用程序關閉時被銷燬。任何教程,這將有幫助

+0

我寧願你使用服務。 –

+0

使用服務與警報服務經理 –

+0

@hotveryspicy:在這種情況下不會IntentService會更好?因爲我不需要處理多個請求。也有任何教程 – Ankuj

回答

2

其他建議在評論。所以讓我詳細說明一下。

請勿使用AsyncTask。 INSTEAD只適用於IntentService。

  1. 做一個類繼承IntentService
  2. 使用報警管理器來觸發的意圖與具體行動項目
  3. 自己的服務定義的接口和用於通知該服務的客戶端。
  4. 維護客戶端提供的這些接口實現對象的列表。
  5. in onHandleIntent(Intent intent)通過檢查動作來識別調用。
  6. 直接在intentService上啓動數據提取請求,作爲使用工作線程工作,並在您維護的接口對象列表的最後調用更新代理中啓動。

  7. 制定方法讓活動註冊並取消註冊以監聽這些更新。

  8. 這實際上是將它們提供的接口實現添加到您維護的列表中,並在調用註銷時從其中刪除。
  9. 確保活動在onResume中註冊並在onPause中註銷自己。
  10. 可以使用重複報警或在單次運行結束後再次啓動報警。 我希望它能幫助:)
+1

Wont IntentService本身就能完成它。爲什麼我們需要Async TAsk? – Ankuj

+0

啊。是的,我怎麼能忘記。不要使用AsyncTask。 IntentService能夠做到這一點 – Javanator

+0

完美的解釋。 +1 –

0

您可以安排在AsyncTask使用Timer.scheduleAtFixedRate固定利率重複。

+0

你知道Asyntask在UIThread上運行嗎? –

+1

@hotveryspicy,那是不正確的。您需要調用execute()方法使其在自己的線程中運行,但您只能從循環線程(通常是主線程)調用此方法。 – Phil

+0

那就是我在運行Asyntask時所說的,如果用戶與UI進行任何交互,那麼用戶會感覺到閃爍(這很糟糕)。 –

0

試試這個..

-更好地利用Service一次又一次地做這項工作。

- 現在,您可以使用綁定或取消綁定Service。如果您希望服務綁定到活動,則使用綁定服務否則使用解除綁定服務。

-如果甚至會更好使用IntentService,因爲在這裏你不需要任務繼續運行,但一定時間後運行。

請參閱此鏈接:

http://mobile.tutsplus.com/tutorials/android/android-fundamentals-intentservice-basics/

0

我寫了定期時間間隔觸發AsyncTask S,不同之處在於他們堅持,即使當應用程序被關閉的應用程序。無論如何,這是我必須做的:

  1. 創建PendingIntent(通過getBroadcast()),裏面有包含一個動作一個Intent
  2. PendingIntent提供給系統的AlarmManager並設置間隔。
  3. 在清單中聲明BroadcastReceiver以捕獲提供給號碼爲Intent的操作字符串。 1.
  4. 在您的BroadcastReceiveronReceive()方法中,觸發AsyncTask