Me refiero a android design considerations: AsyncTask vs Service (IntentService?)IntentService se mató después de dejar mi solicitud
De acuerdo con la discusión, AsyncTask no conviene, porque es bien "obligado" a su actividad
Así , Lanzo un Thread
(supongo que AsyncTask y Thread pertenecen a la misma categoría), tengo un bucle de ejecución infinito y realicé las siguientes pruebas.
- I dejar de fumar mi solicitud, manteniendo presionando tecla de retroceso suave, hasta que vi la pantalla de inicio. El hilo todavía se está ejecutando.
- me matan mi solicitud, yendo a Administrar aplicaciones -> Aplicación -> forzar la detención de. El hilo está detenido.
Por lo tanto, espero que después de que cambian de Thread
a Service
, mi Service
mantendrá viva incluso después de dejar de fumar o matan mi aplicación.
Intent intent = new Intent(this, SyncWithCloudService.class);
startService(intent);
public class SyncWithCloudService extends IntentService {
public SyncWithCloudService() {
super("SyncWithCloudService");
}
@Override
protected void onHandleIntent(Intent intent) {
int i = 0;
while (true) {
Log.i("CHEOK", "Service i is " + (i++));
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Log.i("CHEOK", "", ex);
}
}
}
}
// Doesn't matter whether I use "android:process" or not.
<service
android:name="com.xxx.xml.SyncWithCloudService"
android:process=".my_process" >
</service>
Sin embargo, mi conclusión es que,
- I salí mi aplicación, al mantener presionada la tecla suave Atrás, hasta que vi la pantalla de inicio. El servicio aún se está ejecutando.
- me matan mi solicitud, yendo a Administrar aplicaciones -> Aplicación -> forzar la detención de. El servicio está detenido.
Parece que el comportamiento de Service
y Thread
es el mismo. Entonces, ¿por qué debería usar Service
en lugar de Thread
? ¿Hay algo que me haya perdido? Pensé que mi Service
supongo que seguiría funcionando, incluso después de matar a mi aplicación.
Pero mi prueba es que, cuando deje mi solicitud (presionando la tecla suave varias veces hasta llegar a la pantalla de inicio), el hilo aún se está ejecutando. ¿Es porque, tengo la suerte de que el sistema operativo no mata mi hilo? –
Sí, el hilo se ejecutará durante un período de tiempo hasta que Android decida matar el proceso. No lo hace de inmediato, solo lo hace si y cuando se siente así. No tienes control sobre cuándo se matará el proceso. –
OK. Gracias. Voy a probar para ejecutarlo durante varias horas y ver cómo funciona. Para el servicio, ¿la "garantía" de Android no la está matando? Como tengo un bucle de infinito corriendo dentro de él (para probar). –