¿Es necesario dejar un HandlerThread?

Mi aplicación hace uso de un HandlerThread para algunas operaciones compartidas entre componentes que necesitan ejecutarse en un subproceso de fondo. La mayor parte del tiempo este hilo estará en su estado de espera.

¿Puedo dejar este HandlerThread corriendo (esperando) en mi aplicación, enviándome mensajes cuando sea necesario, pero nunca lo HandlerThread.getLooper().quit() través de HandlerThread.getLooper().quit() ? Esto podría significar que este HandlerThread seguiría existiendo en su estado de espera incluso después de que todos mis componentes de aplicación se hayan destruido.

Inicialmente, esto parecía un gran no para mí, algo que definitivamente no querría hacer, pero ahora no estoy seguro. Cuando Android mata mi proceso, como lo hará cuando necesite liberar tiempo de CPU o memoria, terminará este hilo junto con mi hilo de interfaz de usuario. Además, el hilo estará esperando, por lo que no consumirá ningún tiempo de CPU. Y más allá de eso, mi aplicación hace uso de muchas AsyncTasks , que conozco utilizar un grupo de subprocesos. Desde mi entendimiento, AsyncTask utiliza ThreadPoolExecutor , que no se adhiere a las devoluciones de llamada del ciclo de vida de la aplicación (los hilos en la piscina cuando no está en uso, simplemente sentarse esperando).

Así que mi pregunta es, ¿puedo usar un HandlerThread en múltiples componentes de la aplicación, nunca (o raramente) dejarlo, y dejarlo esperando cuando no esté en uso, sin sufrir efectos secundarios terribles?

Mi preferencia personal es crear un nuevo hilo cuando sea necesario y limpiarlo cuando haya terminado. De esta manera no tengo ningún problema con múltiples componentes tratando de usar el mismo hilo al mismo tiempo y mantener un "buque limpio". También Android tiene el AsyncTask agradable que hace esto fácil para usted.

Dicho esto, no veo ninguna razón por la que no pueda reutilizar su handlerthread para varios componentes, siempre y cuando usted regule el acceso al hilo y lo limpie correctamente cuando se destruyen sus actividades. Si entiendo correctamente este mensaje , el hilo puede seguir ejecutándose aunque todas sus actividades se terminen porque su proceso puede seguir ejecutándose. Para resolver esto, puede configurar el hilo como un hilo de daemon. Los hilos de Daemon se destruyen automáticamente cuando se termina el último hilo no daemon en la aplicación.

Por cierto, también es posible que desee considerar el uso de un ThreadPoolExecutor

  • Multithreading en Android
  • Cómo compartir un objeto entre dos subprocesos (sincronización de subprocesos)?
  • Escritura y lectura entre subprocesos con Android Realm
  • Práctica recomendada para gestionar la llamada de error HTTP
  • TarsosDSP y SurfaceView múltiple problema de subprocesamiento
  • Actualizaciones de interfaz de usuario de subprocesos en Android
  • ¿Cuál es la forma correcta de tratar con multithreading y Realm?
  • Android AsyncTask límites de los hilos?
  • Actualizar Textview desde la función Android
  • ¿El servicio Android se ejecuta desde un hilo separado en lugar de la interfaz de usuario?
  • Android: ¿Dejar de usar Looper?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.