Android Async, Обработчик или Таймер? - PullRequest
8 голосов
/ 22 июля 2011

Каждые 5 секунд я хочу позвонить в мой веб-сервис и получить текст (не изображения), а затем отобразить его в моем ImageAdapter.Каков наилучший способ сделать это?

Ответы [ 3 ]

8 голосов
/ 09 января 2013
final Handler handler = new Handler(); 
    final Runnable r = new Runnable()
    {
        public void run() 
        {
            callWebservice();
        }
    };

    handler.postDelayed(r, 5000);
7 голосов
/ 22 июля 2011

Это зависит от того, хотите ли вы использовать другой поток или нет.Хотите ли вы, чтобы пользователь мог взаимодействовать с приложением в потоке пользовательского интерфейса во время загрузки изображений?Если это так, то я бы определенно использовал AsyncTask с небольшим ProgressBar (style="@android:style/Widget.ProgressBar.Small")

Если вас не волнует поток, то, что сказал @inazaruk.

Редактировать: правда в том, что большинство современных приложений, получающих данные из веб-службы, будут использовать AsyncTask с небольшим небольшим загрузчиком в углу, чтобы дать пользователю знать, что оно обновляется.

Редактировать 2: Вот пример использования TimerTask для запуска чего-либо каждые 5 секунд.Ключ runOnUiThread(). Возможно, есть лучшие способы связать все элементы вместе , но это точно отображает все части.

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();
    }
};
0 голосов
/ 29 мая 2012

Вы должны вызвать asynctask внутри основного потока приложения.Asynctask не может быть вызван в фоновом потоке.

...