È perché la gestione AsyncTask cambiato in nido d'ape. In precedenza, se avevi avviato i 3 AsyncTasks, questi erano in esecuzione contemporaneamente. Dal momento che HC, se il tuo targetSdk
è impostato su o superiore, questi vengono messi in coda ed eseguiti uno per uno (vedere this discussion). Per lavorare che circa iniziare i vostri AsyncTasks in questo modo:
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
invece di:
task.execute(params);
Se il target anche più anziani Androids, è necessario codice condizionale:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
} else {
task.execute(params);
}
o avvolgerla in un una classe di supporto separata:
public class Utils {
public static <P, T extends AsyncTask<P, ?, ?>> void executeAsyncTask(T task) {
executeAsyncTask(task, (P[]) null);
}
@SuppressLint("NewApi")
public static <P, T extends AsyncTask<P, ?, ?>> void executeAsyncTask(T task, P... params) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
} else {
task.execute(params);
}
}
}
e l'uso sarebbe cioè .:
Utils.executeAsyncTask(new MyAsyncTask());
fonte
2012-11-19 17:58:25
Potete fornire il codice per l'AsyncTask o il codice che invoca? –