¿Qué sucede con un hilo de Android después de destruir la actividad que lo creó?

En mi aplicación para Android, la actividad principal a veces inicia un Thread para cargar datos desde un servidor. Este hilo modifica la base de datos de la aplicación y edita algunos archivos importantes. AFAIK, parecería que este hilo continúa ejecutándose. ¿Qué pasará con este hilo si el Android entra en una situación de baja memoria y decide matar a toda la aplicación? ¿Habrá alguna vez una situación en la que este hilo podría morir prematuramente? Si es así, ¿hay alguna manera de ver que el hilo se está matando, y hacer algo al respecto?

Estoy preguntando porque este hilo modifica datos importantes en la base de datos, y si de repente se mata, la aplicación podría dejar de funcionar correctamente.

AFAIK, parecería que este hilo continúa ejecutándose.

Esto es cierto, pero no tiene ninguna garantía de cuánto tiempo el hilo permanecerá vivo.

¿Qué pasará con este hilo si el Android entra en una situación de baja memoria y decide matar a toda la aplicación?

Esto es en realidad un caso bastante raro en mi experiencia, pero dependerá de la memoria disponible del dispositivo y del comportamiento del usuario, por ejemplo, utilizan el dispositivo pesadamente y comienzan varias aplicaciones.

¿Habrá alguna vez una situación en la que este hilo podría morir prematuramente?

Si es así, ¿hay alguna manera de ver que el hilo se está matando, y hacer algo al respecto?

No

Estoy preguntando porque este hilo modifica datos importantes en la base de datos, y si de repente se mata, la aplicación podría dejar de funcionar correctamente.

Lo que usted describe podría ser clasificado como algo que es "misión crítica". Como las otras dos respuestas han señalado, un servicio sería una forma más robusta de hacer las cosas como un servicio es una de las últimas cosas que se "mató" en una situación de memoria baja. El uso de START_REDELIVER_INTENT puede ayudar a reanudar lo que estaba haciendo.

En cualquier caso, si tiene una operación de "misión crítica", necesita diseñar su código para la recuperación completa, como el uso de transacciones y la posibilidad de reversiones en caso de errores.

Parece que deberías mover la actualización de db a un servicio. Una vez que una actividad pasa al fondo, Android asume que su proceso puede ser eliminado si es necesario y reiniciado más tarde sin efectos nocivos. Consulte Fundamentos de la aplicación para obtener más información.

Debe utilizar un servicio:

Debido a que un proceso que ejecuta un servicio se clasifica más alto que un proceso con actividades de fondo, una actividad que inicia una operación de larga duración podría hacer bien iniciar un servicio para esa operación, en lugar de simplemente crear un hilo de trabajo, superar la actividad.

Echa un vistazo aquí: http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html#Lifecycle (donde se origina el texto que pegue)

Podría estar cavando un hilo viejo, pero nadie mencionó una cosa importante.

Cada vez que utilice una base de datos y modifique varias filas, debe utilizar transacciones para garantizar que los datos permanezcan válidos en caso de cualquier tipo de error (que podría ser, por ejemplo, la terminación de un subproceso, una excepción de socket, etc.).

  try{ db.beginTransaction(); //Do whatever you need to do... db.setTransactionSuccessful(); }catch(SQLiteException e){ Log.e("SQLite","Error while updating rows: " + e.getMessage()); }finally{ db.endTransaction(); //Commit (if everything ok) or rollback (if any error occured). db.close(); //Close databse; } 
  • ExecutorService parece estar ejecutando el hilo en la interfaz de usuario?
  • Android: la mejor práctica para realizar operaciones asíncronas en getView ()
  • Android Surfaceview Hilos y fugas de memoria
  • Nexus 5 va a modo de espera hace ciclo de vida de actividad buggy
  • Cómo utilizar Runnable.wait () en AsyncTask? ¿Por qué el AsyncTask NO espera ...?
  • Android claro hilo webview, libre de memoria, evitar OutOfMemoryError
  • ¿Cómo detener Handler Runnable?
  • Supervisar constantemente un sensor en Android
  • Grabar y procesar audio simultáneamente con Thread en Android
  • Android VideoView setVideoURI bloquea el subproceso de la interfaz de usuario
  • ¿El servicio Android se ejecuta desde un hilo separado en lugar de la interfaz de usuario?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.