Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android异步、处理器还是计时器?_Android_Timer_Android Asynctask_Handler - Fatal编程技术网

Android异步、处理器还是计时器?

Android异步、处理器还是计时器?,android,timer,android-asynctask,handler,Android,Timer,Android Asynctask,Handler,每隔5秒钟,我想调用我的Web服务并获取文本(而不是图像),然后在ImageAdapter中显示它。实现这一点的最佳方法是什么?这取决于您是否要使用其他线程。您是否希望用户能够在图像下载时在UI线程上与应用程序交互?如果是这样,那么我肯定会使用带有小(style=“@android:style/Widget.ProgressBar.small”)的 如果你不关心线程,那么@inazaruk会怎么说 编辑:事实是,大多数从web服务检索数据的现代应用程序都会使用一个异步任务,在角落里有一个谨慎的小

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

这取决于您是否要使用其他线程。您是否希望用户能够在图像下载时在UI线程上与应用程序交互?如果是这样,那么我肯定会使用带有小(
style=“@android:style/Widget.ProgressBar.small”
)的

如果你不关心线程,那么@inazaruk会怎么说

编辑:事实是,大多数从web服务检索数据的现代应用程序都会使用一个异步任务,在角落里有一个谨慎的小加载器,只是为了让用户知道它正在更新

编辑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();
    }
};

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

我将添加此更新:我从Web服务获得的实际上是文本,而不是图像。您知道我是否可以使用java timer类每5秒运行一次Asynctask吗?@Raptrex:
timer
专门用于
TimerTask
,虽然如果你想使用
AsyncTask
,你自己实现计时器并不难。我会使用处理程序每5秒调用一次我的AsyncTask吗?谁是inazaruk?他说了什么?这绝对是正确的答案。唯一的问题是run方法可能应该通过再次调用postDelayed来重新调度自己。向上投票
final Handler handler = new Handler(); 
    final Runnable r = new Runnable()
    {
        public void run() 
        {
            callWebservice();
        }
    };

    handler.postDelayed(r, 5000);