Android异步,Handler还是计时器?

8
每隔5秒钟,我希望调用我的webservice并获取文本(而不是图像),然后在我的ImageAdapter中显示它。实现这个最好的方法是什么?
3个回答

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

    handler.postDelayed(r, 5000);

这绝对是正确的答案。唯一的问题是,run方法可能应该通过再次调用postDelayed来重新安排自己的时间表。已点赞。 - G. Blake Meike

7

这取决于你是否想使用不同的线程。你希望用户在UI线程上与应用程序进行交互,同时图片正在下载吗?如果是这样,我肯定会使用AsyncTask和一个小ProgressBar (style="@android:style/Widget.ProgressBar.Small")。

如果您不关心线程,则可以按照@inazaruk所说。

编辑:事实上,大多数从Web服务检索数据的现代应用程序都会使用一个离散的小加载器通知用户它正在更新。

编辑2:这里有一个例子,每5秒运行一次TimerTask。关键是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();
    }
};

我会将此作为更新添加:我从网络服务获取的实际上是文本,而不是图像。 - Raptrex
你知道我能否使用Java Timer类每5秒运行AsyncTask吗? - Raptrex
@Raptrex:Timer 是专门为 TimerTask 设计的,尽管如果你想使用 AsyncTask,自己实现一个定时器也不是很难。 - Wroclai
我是否可以使用 Handler 每 5 秒调用我的 AsyncTask? - Raptrex
inazaruk是谁?他/她说了什么? - n611x007

0

你应该在应用程序的主线程中调用asynctask。asynctask不能在后台线程中调用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接