Estoy usando Android SDK 4.0.3 API15 y quiero ejecutar varias AsyncTasks de forma paralela. Estoy obteniendo mis datos del servidor web y animándolos (10 fps) en tiempo real. Pero dependiendo de las operaciones del usuario, necesito enviar algunos datos al servidor web también. Cuando esto ocurre, mi animación se detiene brevemente (el envío de datos entra en la cola y la obtención de datos lo espera para finalizar) y, por lo tanto, no puedo captar el tiempo real.Ejecutando múltiples AsyncTask's Parallely
Esto answer es bastante explicativo, pero no pude hacerlo funcionar. Entonces cualquier ayuda será muy apreciada.
Creo que necesito para usar esta función para lograr que:
AsyncTask.executeOnExecutor(Executor exec, Params... params)
pero no puedo pasar un ejecutor como parámetro y no puedo crear una instancia de un ejecutor. Esta es mi clase 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();
}
}
Y ejecutarlo así:
GetPlayers task = new GetPlayers();
requestString = "web adress is here...";
task.execute(new String[] { requestString });
¿Qué quiere decir con "no pasar un ejecutor como parámetro y no puedo crear instancias de un ejecutor"? ¿Has marcado developer.android.com/reference/java/util/concurrent/Executor.html, http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html? ¿Qué ejecutor exacto estás tratando de usar? – sandrstar
En realidad, no tengo mucha experiencia en ejecutores. Así que traté de crear una instancia de la clase Executor. Por lo que he entendido desde el enlace, necesito usar ThreadPoolExecutor. Lo buscaré. Gracias. – Srht
Derecha, Executor es solo una interfaz y no se puede crear una instancia. Puede ver la sección 'Subclases indirectas conocidas' de los documentos del ejecutor para los ejecutores presentados. Sin embargo, el típico parece ser ThreadPoolExecutor. – sandrstar