/ / sync 10 asynctask seriell nacheinander in android - android-asynctask

sync 10 asynctask seriell nacheinander in android - android-asynctask

Ich habe 10 asynctask und möchte alle synchronisierenWenn sqlite_cursor_array einen Wert von null hat, dann sollte es die nächste asynctask ausführen oder auf das Beenden der aktuellen asynctask warten, so dass technisch nur eine asynctask zu einer bestimmten Zeit ausgeführt wird. Ich habe versucht, es zum Laufen zu bringen Mit dem Code unten. Aber ich bin nicht sicher, ob es darauf wartet, dass eine asynctask fritih dann zu einem anderen kommt. Es synchronisiert nicht richtig und ich weiß nicht, ob ich es richtig mache? Vielen Dank

          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
}

}

Antworten:

0 für die Antwort № 1

Vielleicht möchten Sie ein Framework in Betracht ziehen. Das Schrauben Bibliothek hat mehrere Möglichkeiten, Aufgaben zu verketten, das ist ziemlich nett IMO. Einer der Vorteile ist die Reduzierung der Einrückung, und Sie können Fehler auf eine saubere Weise behandeln.


0 für die Antwort № 2

Überprüfen Sie in onPostExecute, ob Ihre asynchrone Task beendet wurde

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

Wenn dies der Fall ist, initialisieren Sie das Objekt erneut und starten Sie die Async-Aufgabe erneut.

Behalten Sie dieses Ding im Kopf, Android lässt nur ein Objekt von Aysnc Task einmal ausführen, wenn Sie es erneut ausführen möchten, verwenden Sie ein neues Objekt


0 für die Antwort № 3

Sie können verwenden Serieller Executor für den Umgang mit solchen Situationen.

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

Hoffe das hilft :)


-1 für die Antwort № 4

Führen Sie zuerst AsyncTask aus und führen Sie dann die zweite AsysncTask in der onPostExecute-Methode der ersten AsyncTask usw. aus.

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

und so weiter.....