Primero que todo, sumarme a lo que dice razpeitia con respecto al uso de webservices como método de comunicación entre la aplicación Android y el servidor de base de datos. En
este post comente algo de lo que ha sido mi experiencia con el uso de webservices.
Ahora, con respeto a tu pregunta sobre limitar el tiempo de vida de una tarea asíncrona, o en su defecto, darle un timeout, la verdad es que no se si existe una forma directa pero al menos cuando yo lo necesité hacer, lo solucione de la siguiente manera:
Código Java:
Ver originalboolean flag = true;
miTareaAsincrona = new __TareaAsincrona();
miTareaAsincrona.execute(Params...);
miHandler = new Handler();
@Override
public void run() {
if(flag) {
flag = false;
} else {
miTareaAsincrona.cancel(true);
//Lo que sea necesario hacer al cancelar la tarea
}
miHandler.postDelayed(this,10000);
}
};
miRunnable.run();
Explicación: En realidad lo que se hace, es una ejecución repetitiva cada 10 segundos en este caso (dado por los 10000). La primera vez que entra, como la flag es verdadero, simplemente cambia la flag a falso, si luego de 10 segundos (periodo en el que se vuelve a ejecutar el fragmento de código) aún no ha concluido la tarea asíncrona, pues la cancelo y realizo alguna acción de ser necesario.
IMPORTANTE: Para el correcto funcionamiento, es necesario decirle a la tarea repetitiva que no es necesario que se siga ejecutando una vez que responde la tarea asíncrona, esto a grandes rasgos sería mas o menos así:
Código Java:
Ver originalprivate class __TareaAsincrona
extends AsyncTask
<String,
Void, Boolean
> { if (this.isCancelled()) {
return null;
}
//lo que haga la tarea asíncrona
return ture|false;
}
protected void onPostExecute
(Boolean result
) { if(!this.isCancelled()) {
if(result) {
miHandler.removeCallbacks(miRunnable);
//lo que tenga que hacer cuando termina la tarea asíncrona
}
}
}
}
Espero se entienda la idea y te sea de ayuda.
Salud(os)