Raptrex
Raptrex

Reputation: 4105

Android Async, Handler or Timer?

Every 5 seconds, I want to call my webservice and get text (not images), then display it in my ImageAdapter. What would be the best way to accomplish this?

Upvotes: 8

Views: 10092

Answers (3)

srinivas Nidadavolu
srinivas Nidadavolu

Reputation: 197

final Handler handler = new Handler(); 
    final Runnable r = new Runnable()
    {
        public void run() 
        {
            callWebservice();
        }
    };

    handler.postDelayed(r, 5000);

Upvotes: 8

Sree Rama
Sree Rama

Reputation: 1227

You should call asynctask inside the application main thread. Asynctask can't be called in a background thread.

Upvotes: 0

citizen conn
citizen conn

Reputation: 15390

It depends if you want to use a different thread or not. Do you want the user to be able to interact with the application on the UI Thread while the images are downloading? If so, then I would definitely use an AsyncTask with a small ProgressBar (style="@android:style/Widget.ProgressBar.Small")

If you don't care about threading then what @inazaruk said.

Edit: the truth is most modern apps that retrieve data from a web service will use an AsyncTask with a discreet little loader in the corner just to let the user know it's updating.

Edit 2: here's an example of using a TimerTask to run something every 5 seconds. The key is the runOnUiThread(). There may be better ways to tie all the elements together but this accurately portrays all the pieces.

myTimer = new Timer();
    myTimer.schedule(new TimerTask() {
        @Override
        public void run() {
            CallWebService();
        }

    }, 0, 1000);
}

private void CallWebService()
{
    this.runOnUiThread(fetchData);
}

private Runnable fetchData = new Runnable() {
    public void run() {
      asyncTask.execute();
    }
};

Upvotes: 7

Related Questions