¿Cuál es la diferencia entre Thread.run () y Handler.post () y Service en Android?

En general, se sugiere utilizar Handler.post() en Android cuando sea necesario realizar algunos trabajos en diferentes subprocesos.
Y cuando quiero hacer algunos trabajos en el fondo, se me sugirió para iniciar un Service .

Pero me siento más conveniente con el new Thread (new Runnable(){...} ); Como antes.

Pero me temo que la creación de nuevos hilos a mano puede comportarse de manera diferente en Android, como tal vez detener automáticamente cuando la memoria es baja, mientras que el uso de Service puede no?

Deseando una respuesta clara para ayudarme a salir de esta confusión. ^ ^

Cuando se realizan determinados trabajos en android, se recomienda utilizar Handler porque:

En Android sólo se pueden actualizar las vistas en su subproceso original, es decir, el subproceso en el que se crearon, de lo contrario la aplicación puede lanzar una excepción diciendo

 android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 

Los controladores de Android se enlazan con el subproceso en el que se crean. Cada instancia de Handler se asocia con un solo subproceso y la cola de mensajes del subproceso. Cuando crea un nuevo Handler, está enlazado a la fila / cola de mensajes del subproceso que lo está creando. A partir de ese momento, entregará mensajes y ejecutables a esa cola de mensajes y los ejecutará a medida que salgan del mensaje cola. Así que los manejadores son los más seguros para dar la vuelta en Android.

Mientras que los servicios, Heres un pedazo de código de http://developer.android.com/reference/android/app/Service.html

¿Qué es un Servicio?

La mayoría de la confusión acerca de la clase de servicio en realidad gira en torno a lo que no es:

Un servicio no es un proceso separado. El objeto de servicio en sí no implica que se ejecuta en su propio proceso; A menos que se especifique lo contrario, se ejecuta en el mismo proceso que la aplicación de la que forma parte.

Un servicio no es un hilo. No es un medio por sí mismo para hacer el trabajo fuera del hilo principal (para evitar la aplicación no responde errores). Por lo tanto, un servicio en sí es realmente muy simple, ofreciendo dos características principales:

Un recurso para que la aplicación le diga al sistema algo que quiere hacer en segundo plano (incluso cuando el usuario no está interactuando directamente con la aplicación). Esto corresponde a las llamadas a Context.startService (), que piden al sistema programar el trabajo para el servicio, para que se ejecute hasta que el servicio o alguien explícitamente detenerlo.

Una instalación para una aplicación para exponer parte de su funcionalidad a otras aplicaciones. Esto corresponde a las llamadas a Context.bindService (), lo que permite una conexión de larga data para el servicio para interactuar con él.

Y por último Threads,

Los subprocesos se utilizan para realizar algunas funciones pesadas de no-vista, algunos trabajos de computación pesados ​​como el análisis, etc para que no bloquear UI y realiza con seguridad todo el trabajo …

Llamar a hilo de la interfaz de usuario viola el modelo de hilo único: el kit de herramientas de interfaz de usuario de Android no es seguro para subprocesos y siempre debe manipularse en el subproceso de interfaz de usuario. Es por eso que los siguientes son la alternativa en lugar de usar el hilo directamente

  • Activity.runOnUiThread (Runnable)
  • View.post (Runnable)
  • View.postDelayed (Runnable, largo)
  • Entrenador de animales

Handler se utiliza para comunicarse entre el hilo de la interfaz de usuario y el hilo de fondo AsyncTask se utiliza para realizar una pequeña tarea pesada en segundo plano

Si usted tiene el trabajo más ligero en el fondo entonces utilice el manipulador para el uso más pesado del trabajo del fondo AsyncTask y para hacer el trabajo más pesado en servicio del uso del fondo

Ver http://android-developers.blogspot.com/2009/05/painless-threading.html

Ejemplo

  • Para agregar o quitar datos de la vista de lista, puede utilizarla el manejador
  • Para obtener datos XML desde el servidor y reflejar aquellos en su vista, utilice AsynTask. AsyncTask es más preferido que threading
  • Para reproducir archivos de música utilice el servicio

Los manejadores son para ejecutar partes de código en un hilo específico . El caso de uso más común de lejos es cuando estás en un contexto de hilo de trabajo y quieres ejecutar algo en el hilo principal (UI) … en este caso habrás instanciado un Handler en tu hilo principal (durante la inicialización, por ejemplo) , Y post () un Runnable a él del hilo de trabajo.

Thread.run () es el punto de entrada de subproceso básico de Java. Se implementa esto cuando se necesita un hilo de fondo para hacer un poco de E / S o de computación pesada, excepto que en Android que normalmente no lo hace porque es mucho más fácil de usar un AsyncTask, en el que se anula doInBackground () para el código de hilo de trabajo Es decir, donde normalmente implementar ejecutar ()) y sobreescribir onPostExecute () con el código que desea ejecutar en su interfaz de usuario después de completar la tarea de trabajo.

Los servicios son otra cosa enteramente … no son hilos. El código de servicio se ejecutará en el hilo principal junto con la interfaz de usuario. Usted todavía puede usar AsyncTask etc de ellos, o utilizar un tipo especial de servicio llamado IntentService que lo hará es trabajar en un hilo de trabajo.

  • Cómo mostrar texto marathi en Android procedente de webservice
  • Asegurar las APIs de webservice RESTful de Spring de acceso no autorizado?
  • ¿Cómo acceder a un contexto de aplicación ya en ejecución desde un servicio de adaptador de sincronización en Android?
  • Servicio Web SocketTimeOutException provoca inconsistencia de base de datos
  • ¿Cómo determinar si un servicio de Android se está ejecutando en primer plano?
  • Cómo convertir HttpEntity en JSON?
  • Se esperaba BEGIN_OBJECT pero era BEGIN_ARRAY en la línea 1 columna 2 (edición pequeña)
  • Cómo tratar un objeto JSON grande en Android
  • Servicio de primer plano por Android
  • ¿Cómo puedo encontrar la cantidad de datos que se transfieren cuando hago una llamada de servicio web desde mi aplicación android?
  • Comprobar si los datos de campo han cambiado en lugar de cualquier campo en los datos secundarios
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.