Jaka zmiana zaszła w Async Task po Android Gingerbread?
Jaką zmianę rzeczywiście wykonał zespół Android w zadaniu asynchronicznym po systemie Android 2.3. Gdy wykonałem następujący kod, uzyskuję taki sam wynik zarówno w systemie Android 2.3, jak i 3.0.
package com.sample.asynctask;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
public class AsyncTaskTestActivity extends Activity {
private static final String TAG = "AsyncTaskTestActivity";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//ExecutorService executorService = Executors.newFixedThreadPool(1);
for (int i = 1; i <= 20; i++) {
TestTask testTask = new TestTask(i);
testTask.execute();
}
}
private static class TestTask extends AsyncTask<Void, Integer, Void> {
int i;
public TestTask(int i) {
Log.i(TAG, "Constructor for " + i);
this.i = i;
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
Log.i(TAG, "onPreExecute for " + i);
}
@Override
protected Void doInBackground(Void... params) {
Log.i(TAG, i + " Thread goes to sleep");
try {
Thread.sleep(20000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.i(TAG, i + " Thread wakes up");
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
Log.i(TAG, "onPostExecute for " + i);
}
}
}
Moje przypuszczenie w Gingerbread: 5 Zadanie asynchroniczne wykonuje się w jednej puli wątków naraz. Moje założenie w Honeycomb: 1 Zadanie asynchroniczne wykonuje się w jednej puli wątków naraz. Dokładnie jak jednoczesne wykonanie.
Ale zarówno Gingerbread, jak i Honeycomb wykonują 5 zadań asynchronicznych w tym samym czasie.
A także gdy liczba zadań asynchronicznych zostanie zwiększona do 140.i nie otrzymujęjava.util.concurrent.RejectedExecutionException
.
Czy moje założenia są poprawne? Co tak naprawdę się tam dzieje?