2010-06-23 21 views
11

Me gustaría saber, una vez por todas. He leído en muchos lugares. Cuando quiero hacer algunas 'operaciones a largo plazo' debería usar un Handler.Handler vs Thread

¿Pero no entiendo por qué? Todas mis 'operaciones a largo plazo' las rodeo con hilos regulares, y funcionan bien.

¿Por qué usaría Handler para esto?

La única vez que tuve que usar Handler era, cuando tuve que programar alguna tarea (postDelayed)

¿Hay alguna idea principal que extraño de handlers (cuando debería realmente usarlo)? O tal vez no hay realmente diferencia?

+0

Posible duplicado de [Handler vs AsyncTask vs Thread] (http://stackoverflow.com/questions/6964011/handler-vs-asynctask-vs-thread) –

Respuesta

16

A le permite comunicarse de vuelta con el subproceso de interfaz de usuario de su cadena de fondo. Esto se debe a que las operaciones de IU están prohibidas desde dentro de los hilos de fondo. Tenga en cuenta que a partir de la versión 1.5, la clase AsyncTask hace que sea mucho más fácil hacerlo.

+1

Entonces, en otras palabras, solo cuando quiero comunicar mi hilo de fondo con la interfaz de usuario, debería usar Handler? – rayman

+2

@rayman: si necesita acceder a cualquier componente de la interfaz de usuario, necesita un controlador, pero si se dirige a la API de nivel 3 y superior, AsyncTask hace el trabajo más fácil para usted. Si no necesita acceso a la IU en absoluto, tampoco necesita y puede generar un nuevo Tema. – JRL

+0

¡Gracias! Gracias. – rayman

1

No se trata solo de volver al hilo de la interfaz de usuario, ya que runOnUiThread (Runnable) lo hace muy bien. Sospecho que esto se trata más bien de facilitar que Android administre los hilos y otros recursos que no deberían vivir fuera del contexto de una Actividad, y que las excepciones de "Actividad se ha filtrado ..." indican cuándo sucedió eso.