¿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.
- Thread.sleep detiene todas las Asyntasks anidadas
- Emisión de concurrencia para la cancelación del bucle de encuesta larga
- Android: java.lang.OutOfMemoryError: falla en la creación del hilo
- ¿Cómo administrar una conexión Bluetooth en Android a través de cambios de configuración?
- Android - Thread vs AlarmManager
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?
- ¿Por qué utilizar AsyncTaskLoader con LoaderManager, en lugar de Simple Handler?
- Proceso de multi-subprocesos Java (Android)
- Cómo evitar que la aplicación de Android se bloquee debido a la excepción en el hilo de fondo?
- ¿Cómo debo manejar la comunicación entre los hilos de la IA y el bucle del juego principal?
- Los hilos AsyncTask nunca mueren
- Pasar variables entre el renderizador y otra clase con queueEvent ()
- Activity.runOnUiThread de Android no es estático, así que ¿cómo puedo usarlo?
- Android "Sólo el subproceso original que creó una jerarquía de vistas puede tocar sus vistas." Error en Fragmento
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
- La conversión al formato de Dalvik falló con error 1 adt r18
- Cortar la imagen después de seleccionar el área mediante la detección de bordes en android