我有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
}
}
答案 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();
}
}
依旧.....