在android中一个接一个地连续同步10个asynctask

时间:2015-01-07 06:30:51

标签: android android-asynctask

我有10个asynctask,我想一个接一个地同步所有这些以及null check.If sqlite_cursor_array有空值然后它应该执行下一个asynctask或者等待当前的asynctask完成所以技术上只有一个asynctask将在给定的时间执行。我试图使其工作与下面的代码。但我不知道它是否等待一个asynctask finsih然后到另一个。它没有正确同步,我不知道我是否正在做对的 ?感谢

          async1 async1_test = new async1();
            async1_test.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR );

                            if(async1_test.getStatus() == AsyncTask.Status.FINISHED){
                                ///
                        async2 async2_test = new async2(Sync.this,getjsonarray_sqlite1);
                        async2_test.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR );
                        if(async2_test.getStatus() ==AsyncTask.Status.FINISHED){

                 async3 async3_test = new async3(Sync.this,getjsonarray_sqlite2);
                    async3_test.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR );
                    if(async3_test.getStatus() ==AsyncTask.Status.FINISHED){

                     /// so on for another 10 asynctask
                     }

                 }

4 个答案:

答案 0 :(得分:0)

您可能想要考虑一个框架。 Bolts库有几种链接任务的方法,这是非常好的IMO。它的一个优点是减少了压痕量,你可以用干净的方式处理错误。

答案 1 :(得分:0)

在onPostExecute中,检查您的异步任务是否已完成

if(async1_test.getStatus() == AsyncTask.Status.FINISHED)

如果为true,请重新初始化对象并再次启动异步任务。

请注意,Android只允许Aysnc Task的一个对象执行一次,如果您想再次执行它,请使用新对象

答案 2 :(得分:0)

您可以使用Serial Executor来处理此类情况。

new AsynTask1().executeOnExecutor(AsyncTask.THREAD_POOL_Executor,params);

希望这会有所帮助:)

答案 3 :(得分:-1)

执行第一个AsyncTask然后在第一个AsyncTask的onPostExecute方法中执行第二个AsysncTask,依此类推。

new FirstAsyncTask().execute();

private class FirstAsyncTask extends AsyncTask<URL, Integer, Long> {
 protected Long doInBackground(URL... urls) {
     //do something
 }

 protected void onPostExecute(Long result) {
     new SecondAsyncTask().execute();
 }
}

private class SecondAsyncTask extends AsyncTask<URL, Integer, Long> {
 protected Long doInBackground(URL... urls) {
     //do something
 }

 protected void onPostExecute(Long result) {
    new ThirdAsyncTask().execute();
 }
}

依旧.....