Android异步任务一个接一个

Android异步任务一个接一个,android,parsing,soap,android-asynctask,download,Android,Parsing,Soap,Android Asynctask,Download,我有一个现有的代码,其中有一个异步任务用于某些请求-响应。 在post-execute方法中,它将解析的数据设置为一些db 现在我需要修改这段代码,以便在应用程序启动时,一个接一个地下载数据。 i、 e.我需要执行任务A,然后在其完全完成时(即使数据已设置),我需要启动任务B,以此类推,大约12个任务 注意:在开始下一个任务之前,我还需要完成“后执行” 我不知道该怎么做。 请建议。您可以使用myAsyncTask.executeOnExecutor(串行执行器) 现在执行顺序为a->b->c 实

我有一个现有的代码,其中有一个异步任务用于某些请求-响应。 在post-execute方法中,它将解析的数据设置为一些db

现在我需要修改这段代码,以便在应用程序启动时,一个接一个地下载数据。 i、 e.我需要执行任务A,然后在其完全完成时(即使数据已设置),我需要启动任务B,以此类推,大约12个任务

注意:在开始下一个任务之前,我还需要完成“后执行”

我不知道该怎么做。
请建议。

您可以使用
myAsyncTask.executeOnExecutor(串行执行器)


现在执行顺序为a->b->c

实施取决于您的需求

  • 如果每次调用后都需要更新UI,则可以在
    doInBackground()
    中下载并保存数据,并在
    onPostExecute()中下载并保存更新

  • 如果您只想更新一次UI,请下载
    doInBackground()
    中循环中的所有数据,并将数据仅保存在db中,最后只调用一次
    onPostExecute()

  • 如果它与更新UI无关,那么您可以简单地使用
    Thread


  • 注意:
    执行顺序将是串行的,仅在蜂巢的上方是并行的。
    下面是并行的。这个有点乱

    使用配置AsyncTask将强制串行执行后台逻辑, 也就是说,doInBackground()调用中包含的逻辑。

    SERIAL_EXECUTOR不保证何时调用onPostExecute()

    在串行执行器模式下执行一组异步任务可能会导致任务a的onPostExecute() 在任务B的doInBackground()之后执行

    如果后一个需求对您的系统不重要,只需使用SERIAL_EXECUTOR即可


    但是,如果是这样的话,您将需要以一种强制的方式更改您的体系结构 这样的要求

    一种方法如下:

    class MyAsyncTask<Void, Void, Void> {
    
            @Override
            protected  Void doInBackground(Void... params) {
                // do background work
                return null;
            }
    
            @Override
            protected void onPostExecute(Void args) {
                // update UI here
                new MyNextAsyncTask.execute(..); // <---------- start next task only after UI update has completed
            }
    
    }
    


    希望有帮助。

    理论上很简单,创建一个扩展AsyncTask的类,创建它们的实例列表,并在post execute中执行每一个。您不能在“Task a”的ONPOST execute中创建“Task B”并开始执行它吗?不可以。因为此任务以后可能会再次调用,要刷新值,实际上我无法正确使用它。我尝试搜索正确的用法…但运气不好。如果有任何有用的链接,我们将不胜感激。如何从所有异步任务中获取回调,是否已完成?
    class MyAsyncTask<Void, Void, Void> {
    
            @Override
            protected  Void doInBackground(Void... params) {
                // do background work
                return null;
            }
    
            @Override
            protected void onPostExecute(Void args) {
                // update UI here
                new MyNextAsyncTask.execute(..); // <---------- start next task only after UI update has completed
            }
    
    }
    
    new Thread()  {
    
         ConditionVariable mCondition = new ConditionVariable(false);
         void run() {
    
              do_A();
    
              runonUIThread(updateAfter_A_Runnable);
    
              mPreviewDone.block(); // will be release after updateAfterA_Runnable completes!
    
    
              do_B();
    
              runonUIThread(updateAfter_B_Runnable);
    
              mPreviewDone.block(); // will be release after updateAfter_B_Runnable completes!
    
    
    
              etc..
         }
    
    }