Android异步,处理程序还是计时器?

时间:2011-07-21 21:20:10

标签: android timer android-asynctask handler

每隔5秒,我想调用我的网络服务并获取文本(不是图像),然后在我的ImageAdapter中显示它。什么是实现这一目标的最佳方式?

3 个答案:

答案 0 :(得分:8)

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

    handler.postDelayed(r, 5000);

答案 1 :(得分:7)

这取决于您是否要使用其他线程。您是否希望用户能够在下载图像时与UI线程上的应用程序进行交互?如果是这样,那么我肯定会使用AsyncTask ProgressBar {style="@android:style/Widget.ProgressBar.Small"}

如果你不关心穿线那么@inazaruk说的话。

编辑:事实上,从Web服务中检索数据的大多数现代应用程序都会使用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();
    }
};

答案 2 :(得分:0)

您应该在应用程序主线程中调用asynctask。无法在后台线程中调用Asynctask。