Reputation: 723
How does one create an AsyncTask
which keeps running itself after a fixed interval of time.
For eg. get data from server every 5 minutes and give notification to caller thread that it has received the data. I searched on the forum but could not find much. What I have gathered so far is that
1) A UI thread will call AsyncTask
2) onPrExecute
for UI thread access before executing
3) OnPostExecute
for UI thread access after executing
I dont need to show any progress update to the user. Also, the task will be destroyed when the app closes. Any tutorial for this will he helpful
Upvotes: 1
Views: 1194
Reputation: 13815
As other suggested in the comments. So let me elaborate it more.
DON'T USE AsyncTask. INSTEAD GO FOR IntentService ONLY.
Initiate the data fetch request directly on intentService as the use worker thread to work and in the end call update delegate of the interface object list you maintained.
Make methods to Let Activity register and unregister from listening these updates.
Upvotes: 2
Reputation: 13511
I wrote an app that fires AsyncTask
s on a regular interval, except that they persist even when the app is closed. Anyway, here's what I had to do:
PendingIntent
(via getBroadcast()
) that contains an Intent
that contains an action.PendingIntent
to the system's AlarmManager
and set the intervals.BroadcastReceiver
in the manifest to catch the action string supplied to the Intent
in no. 1.onReceive()
method of your BroadcastReceiver
, fire the AsyncTask
.Upvotes: 0
Reputation: 33534
Try this..
- Better use Service
to make this work again and again.
- Now you can use bound or unbound Service
. If you want the Service to be bounded to the Activity then use Bound Service else use UnBound Service.
- If would be even better to use IntentService
, as here you don't need the task keep running, but runs after certain amount of time.
See this link:
http://mobile.tutsplus.com/tutorials/android/android-fundamentals-intentservice-basics/
Upvotes: 0
Reputation: 36289
You can schedule the AsyncTask
to repeat at a fixed rate using Timer.scheduleAtFixedRate.
Upvotes: 0