等待publishProgress完成后再继续执行doInBackground AsyncTask android

2024-01-15

My 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(),它仍然执行作业 3doInBackground。如何等待 onProgressUpdate 完成后再继续?

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


我认为,您使用 doInBackground 和publishProgress() 的方式是错误的,但我仍然需要查看方法的代码获取数据() .

后台操作方法应该用于执行某些任务,该任务应该在事件线程之外的其他线程中执行,并且在发布进度方法,您应该执行与事件线程一起使用的任务。因此,如果获取数据()与事件线程无关,请将代码写在后台操作本身。

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

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

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

等待publishProgress完成后再继续执行doInBackground AsyncTask android 的相关文章

随机推荐