Utilizzo Android SDK 4.0.3 API15 e voglio eseguire più AsyncTasks in parallelo. Sto recuperando i miei dati da server web e animazione (10 fps) in tempo reale. Ma a seconda delle operazioni dell'utente, devo anche inviare alcuni dati al web server. In questo caso, la mia animazione si interrompe per un breve periodo (l'invio dei dati viene messo in coda e il download dei dati attende che finisca) e quindi non riesco a catturare il tempo reale.Esecuzione simultanea di più asyncTask
Questo answer è abbastanza esplicativo ma non ho potuto farlo funzionare. Quindi qualsiasi aiuto sarà molto apprezzato.
Penso di aver bisogno di usare questa funzione per raggiungere questo:
AsyncTask.executeOnExecutor(Executor exec, Params... params)
ma non posso passare un esecutore come un parametro e non posso istanziare un esecutore. Questa è la mia classe AsyncTask:
public class GetPlayers extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
rawData="";
for (String url : urls) {
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
try {
HttpResponse execute = client.execute(httpGet);
InputStream content = execute.getEntity().getContent();
BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
if((rawData = buffer.readLine()) == null){
rawData = "error";
}
} catch (Exception e) {
e.printStackTrace();
}
}
return rawData;
}
@Override
protected void onPostExecute(String result) {
manipulate();
}
}
E io eseguirlo in questo modo:
GetPlayers task = new GetPlayers();
requestString = "web adress is here...";
task.execute(new String[] { requestString });
Cosa intendi per 'non passare un esecutore come parametro e non posso istanziare un esecutore'.? Hai controllato developer.android.com/reference/java/util/concurrent/Executor.html, http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html? Quale esatto esecutore stai cercando di usare? – sandrstar
In realtà non ho molta esperienza con gli Executor. Così ho provato a istanziare la classe Executor. Per quanto ho capito dal link ho bisogno di utilizzare ThreadPoolExecutor. Lo cercherò. Grazie. – Srht
Giusto, Executor è solo un'interfaccia e non può essere istanziato. Puoi consultare la sezione "Sottoclassi Indiretti conosciuti" dei documenti Executor per gli esecutori presentati. Tuttavia, quello tipico sembra essere ThreadPoolExecutor. – sandrstar