In der Android-Entwicklung über serielle Verarbeitung und Parallelverarbeitung mit AsyncTask wusste ich nicht, welche Art von Bewegung es wäre, wenn es fast zur gleichen Zeit funktionieren würde, und die Reihenfolge ist tatsächlich garantiert. Lassen Sie uns also den Code leicht zusammenstellen und überprüfen. Ich habe es getan, also möchte ich es als Memo behalten.
[Referenz-URL] developer - AsyncTask Android-Serielle Verarbeitung von AsyncTask? Parallelverarbeitung? Wie wird die asynchrone Verarbeitung von AsyncTask realisiert
task1:execute() task2:executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)
//Erste asynchrone Aufgabe
AsyncTask task1 = new AsyncTask() {
@Override
protected Object doInBackground(Object[] objects) {
Log.v("task1", "start!!!");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
Log.v("task1", "done!!!");
}
}
.execute();
//Zweite asynchrone Aufgabe
AsyncTask task2 = new AsyncTask() {
@Override
protected Object doInBackground(Object[] objects) {
Log.v("task2", "start!!!");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
Log.v("task2", "done!!!");
}
}
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
Ich habe es mehrmals ausgeführt, um zu sehen, ob es in Ordnung war.
【Erstes Mal】
5970-5995/com.example.testcode V/task2: start!!!
5970-5994/com.example.testcode V/task1: start!!!
5970-5970/com.example.testcode V/task2: done!!!
5970-5970/com.example.testcode V/task1: done!!!
【Zweites Mal】
7138-7157/com.example.testcode V/task2: start!!!
7138-7156/com.example.testcode V/task1: start!!!
7138-7138/com.example.testcode V/task2: done!!!
7138-7138/com.example.testcode V/task1: done!!!
【Drittes Mal】
7383-7403/com.example.testcode V/task1: start!!!
7383-7404/com.example.testcode V/task2: start!!!
7383-7383/com.example.testcode V/task2: done!!!
7383-7383/com.example.testcode V/task1: done!!!
Der zweite Start ist umgekehrt. .. ..
task1:executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR) task2:execute()
//Erste asynchrone Aufgabe
AsyncTask task1 = new AsyncTask() {
@Override
protected Object doInBackground(Object[] objects) {
Log.v("task1", "start!!!");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
Log.v("task1", "done!!!");
}
}
.execute();
//Zweite asynchrone Aufgabe
AsyncTask task2 = new AsyncTask() {
@Override
protected Object doInBackground(Object[] objects) {
Log.v("task2", "start!!!");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
Log.v("task2", "done!!!");
}
}
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
Ich habe es auch mehrmals versucht, um zu sehen, ob es in Ordnung war.
【Erstes Mal】
7267-7273/com.example.testcode V/task2: start!!!
7267-7272/com.example.testcode V/task1: start!!!
7267-7267/com.example.testcode V/task2: done!!!
7267-7267/com.example.testcode V/task1: done!!!
【Zweites Mal】
7643-7662/com.example.testcode V/task1: start!!!
7643-7663/com.example.testcode V/task2: start!!!
7643-7643/com.example.testcode V/task2: done!!!
7643-7643/com.example.testcode V/task1: done!!!
【Drittes Mal】
7871-7891/com.example.testcode V/task1: start!!!
7871-7892/com.example.testcode V/task2: start!!!
7871-7871/com.example.testcode V/task2: done!!!
7871-7871/com.example.testcode V/task1: done!!!
Das Ausführungsergebnis hier ähnelt dem von Prototyp 1.
Es scheint, dass die Reihenfolge der Verarbeitung nicht garantiert ist, wenn die serielle Verarbeitung und die parallele Verarbeitung fast gleichzeitig ausgeführt werden. Wenn Sie die Bestellung sicher garantieren möchten, ist es besser, beides in Serienbearbeitung zu tun.
Das ist anders! Ich denke, es gibt einen Punkt, aber ich hoffe, dass es hilfreich sein wird.
das ist alles.