Asyn任务的onProgressUpdate方法不是一对一调用的

时间:2012-12-08 15:45:21

标签: android android-asynctask

我正在使用Asyn Task在后台做一些工作,然后我使用onProgressUpdate()更新UI。问题是它不是一对一调用,意味着我此时调用它本身下一行代码的执行,有时会被调用并完成其工作,但有时它会在一段延迟后完成其工作。I want to know that can we make it sure that the onProgressUpdate() must execute when we want it或者它取决于设备的cpu,以及何时执行onProgressUpdate(),立即或经过一段时间的延迟。请帮帮我。谢谢。

2 个答案:

答案 0 :(得分:1)

您必须手动在doInBackground中调用publishProgress。

来自Android文档,

doInBackground(Params ...),在onPreExecute()完成执行后立即在后台线程上调用。 ...此步骤还可以使用publishProgress(Progress ...)发布一个或多个进度单位。这些值发布在UI线程的onProgressUpdate(Progress ...)步骤中。

参考http://developer.android.com/reference/android/os/AsyncTask.html

答案 1 :(得分:1)

当您致电onProgressUpdate()时,实际上您正在向处理程序发送请求,以便在另一个线程中运行代码。

由Android操作系统决定什么时候是最好的调整切换线程,然后才能运行代码。

您可以通过请求当前线程暂停来以某种方式强制Thread切换。例如:

 Thread.sleep(1);

但是,您无法确定下一个正在运行的线程是否将运行onProgressUpdate()的UI线程。

问候。