Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.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 Asyn任务';s onProgressUpdate方法未被一对一调用_Android_Android Asynctask - Fatal编程技术网

Android Asyn任务';s onProgressUpdate方法未被一对一调用

Android Asyn任务';s onProgressUpdate方法未被一对一调用,android,android-asynctask,Android,Android Asynctask,我使用Asyn Task在后台做一些工作,然后使用onProgressUpdate()更新UI。问题是它没有被一对一调用,这意味着如果我在执行下一行代码之前调用它,有时它会被调用并完成工作,但有时它会在延迟后完成工作。我想知道,我们是否可以确保onProgressUpdate()必须在需要时执行,或者它取决于设备的cpu何时执行onProgressUpdate(),立即或延迟后。请帮助我。提前感谢。您必须在doInBackground内手动呼叫publishProgress 从Android文档

我使用Asyn Task在后台做一些工作,然后使用onProgressUpdate()更新UI。问题是它没有被一对一调用,这意味着如果我在执行下一行代码之前调用它,有时它会被调用并完成工作,但有时它会在延迟后完成工作。
我想知道,我们是否可以确保onProgressUpdate()必须在需要时执行,或者它取决于设备的cpu何时执行onProgressUpdate(),立即或延迟后。请帮助我。提前感谢。

您必须在doInBackground内手动呼叫publishProgress

从Android文档中

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


调用
onProgressUpdate()
时,请参考,实际上,您是在向处理程序发出请求,要求在另一个线程中运行代码和平

由安卓操作系统决定何时是切换线程的最佳时机,只有到那时代码才会运行

您可以通过请求当前线程暂停来强制执行
线程
开关。例:

 Thread.sleep(1);
但是,您无法确定下一个运行的线程是否是UI线程,其中将运行
onProgressUpdate()


问候。

对不起,先生,这里没有给出我问题的答案。我正在以同样的方式进行操作,但没有从onProgressUpdate()获得所需的功能。这意味着没有办法以我想要的方式实现onProgressUpdate()。很遗憾,有,但不是那么简单。您需要在共享对象周围使用
sinchronized
块,并使AsynkTask在该对象上等待()
,直到
onProgressUpdate()
完成并调用
notify()
。如果使用不当,会导致死锁。