gpt4 book ai didi

android - 在继续执行 doInBackground AsyncTask android 之前等待 publishProgress 完成

转载 作者:行者123 更新时间:2023-11-29 00:26:17 26 4
gpt4 key购买 nike

我的 AsyncTask 看起来像:

private class MyTask extends AsyncTask<String, Void, List<Data>> {
private volatile UserData userData;
protected List<Data> doInBackground(String... params) {
// do some job 1
publishProgress();
// wait until the progress finish to update variable.
if(userData!= null){
//do some job 2
}

//do some job 3

}

protected void onProgressUpdate(Void... values) {
// try to ask user and collect information
userData= getData();
}

}

问题是当我调用 publishProgress() 时,它仍然在 doInBackground 中执行作业 3。如何在继续之前等待 onProgressUpdate 完成?

更新:
在 getData() 方法中,我试图获取用户的当前位置,这在 doInBackground 和 View 中的一些其他信息中不起作用。我必须这样做,因为作业 1 需要很长时间,并且可以更改用户的当前位置。我需要用户最准确的位置。

最佳答案

我认为,您使用 doInBackground 和 publishProgress() 的方式有问题,但我仍然需要查看方法 getData() 的代码。

doInBackground 方法应该用来做一些任务,它应该在事件线程之外的其他线程中执行,而在 publishProgress 方法中,你应该执行与事件线程。所以,如果getData()与事件线程无关,请将代码写在doInBackground本身。

但是,如果您的要求只是使用这两种方法,那么您可以添加一个同步块(synchronized block),如下所示:

private class MyTask extends AsyncTask<String, Void, List<Data>> {
private volatile UserData userData;
protected List<Data> doInBackground(String... params) {

synchronize(userData)
{
// do some job 1
publishProgress();
// wait until the progress finish to update variable.
if(userData!= null){
//do some job 2
}

//do some job 3
}
}

protected void onProgressUpdate(Void... values) {
// try to ask user and collect information
synchronize(userData)
{
userData= getData();
}
}

}

关于android - 在继续执行 doInBackground AsyncTask android 之前等待 publishProgress 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19173569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com