Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Debo usar AsyncTask o IntentService para mi aplicación?

He estado leyendo sobre la conectividad a Internet con Android y noté que hay diferentes maneras de manejar esto, por ejemplo, AsyncTask e IntentService. Sin embargo, todavía no estoy seguro de cuál utilizar. Mi aplicación es básicamente un localizador de localizaciones / senderos con Google Maps. Mi conectividad a Internet se utilizará para encontrar los senderos más cercanos dentro de un cierto radio del mapa. Por lo tanto, cada vez que un usuario mueve o desliza el mapa a una nueva ubicación, se actualizará con los senderos más cercanos. También agregará un nuevo rastro, y permitirá que el usuario califique un rastro.

AsyncTask será suficiente para esto o debo utilizar IntentService?

  • ¿Necesita ayuda para descargar imágenes de fondo en Android?
  • Biblioteca de clientes API de REST para Android
  • Realizar una llamada REST API de un IntentService o un AsyncTask?
  • ¿Necesita ayuda para descargar imágenes de fondo en Android?
  • Esperando la devolución de llamada asincrónica en IntentService de Android
  • Android IntentService Error de instancia
  • Cómo recopilar información de IntentService y actualizar la interfaz de usuario de Android
  • Enviar una transmisión sólo a actividades específicas
  • 6 Solutions collect form web for “¿Debo usar AsyncTask o IntentService para mi aplicación?”

    Debe utilizar un AsyncTask para tareas repetitivas cortas que están estrechamente vinculadas a una actividad, como lo que está intentando hacer actualmente. IntentService están más orientados hacia tareas programadas (repetitivas o no) que deberían ejecutarse en segundo plano, independientemente de su actividad.

    Pueden usarse de manera muy diferente para diferentes propósitos.

    AsyncTask es una útil utilidad de subprocesamiento que puede utilizarse si necesita informarle constantemente al usuario algo o realizar periódicamente operaciones en el subproceso principal. Ofrece mucho control de grano fino y debido a su naturaleza es muy fácil trabajar con la Activity mientras que un IntentService generalmente requiere el uso del marco BroadcastReceiver o IBinder .

    IntentService se puede utilizar muy parecido a un AsyncTask , pero su propósito es para la descarga de fondo, la carga u otras operaciones de bloqueo que no necesitan la interacción del usuario o el hilo principal. Por ejemplo, si desea descargar y almacenar mapas en caché, puede llamar a un IntentService para que el usuario no tenga que buscar la aplicación para que descargue. Del mismo modo, si usted está enviando datos a su servidor, un IntentService es extremadamente útil en este sentido porque puede comenzar y olvidar. El usuario puede, por ejemplo, escribir un comentario en su aplicación y luego presionar "enviar". "Enviar" lanzará el IntentService que recibe el comentario y lo envía a su servidor en un hilo de fondo. El usuario puede presionar "enviar" y dejar la aplicación inmediatamente y el comentario, finalmente, todavía llegar a sus servidores (suponiendo que no hay errores por supuesto). Si lo hiciste con un AsyncTask en tu Activity por otro lado, el sistema podría aniquilar tu proceso en medio de tu intercambio y puede o no puede pasar.

    En términos generales, ninguno de los dos está destinado a aplicaciones de larga ejecución. Están destinados a operaciones cortas y únicas. Podrían utilizarse para acciones permanentes o de larga duración, pero no es recomendable.

    AsyncTask no funciona bien con los cambios de configuración u otras cosas que reinician la actividad.

    IntentService es bueno para algo que siempre debe estar disponible, independientemente de cuánto tiempo se tarda en hacer su trabajo. Prefiero IntentService en la mayoría de los casos porque AsyncTask es mucho más dependiente del estado de actividad.

    Algunas notas:

    • AsyncTask es el mejor para tareas rápidas que deberían ir directamente de vuelta a la interfaz de usuario, pero se puede utilizar en una variedad de situaciones.
    • La declaración "realizar periódicamente operaciones en el hilo principal" es vaga. AsyncTask genera un nuevo subproceso de fondo que es diferente del subproceso principal y hace su trabajo en el nuevo subproceso. Así, el nombre AsyncTask.
    • Un IntentService no requiere "manipular" el marco BroadcastReceiver. Todo lo que necesitas hacer es enviar un intento de difusión local, y detectarlo en tu actividad. Si esto es más difícil de hacer que un AsyncTask, no lo sé.
    • IntentService está destinado a hacer tareas de larga ejecución, lo que hace en el fondo.
    • AsyncTaskLoader está bien para usar, pero se supone que es la clase base para CursorLoader, etc. Si desea actualizar rutas "cercanas" cuando los usuarios se mueven a una nueva ubicación, un IntentService es probablemente mejor.

    No olvide comprobar la conectividad antes de intentar actualizar la ubicación.

    AsyncTasks están muy estrechamente vinculados a las actividades y, a menudo, pueden provocar errores de ventana filtrados si navega lejos de la actividad que creó el AsyncTask. Pero son ideales para mostrar una ProgressBar porque puedes actualizar rápidamente el porcentaje de progreso.

    IntentServices son más limpios y seguros. Son más difíciles de implementar cuando eres un desarrollador de Android para principiantes, pero una vez que aprendes cómo iniciarlos y manejarlos probablemente nunca volverás a AsyncTasks.

    IntentServices también permite un diseño más modular en su aplicación. Normalmente creo una clase separada para todos mis IntentServices, pero para AsyncTasks los creo como una clase interna de Activity. Si fuera a separar un AsyncTask de una actividad, tendría que pasar en el contexto de la actividad y ver objetos en el constructor AsyncTask que puede ser complicado.

    Como se mencionó anteriormente AsyncTask resolverá su problema.

    Pero AsyncTask en cuenta que AsyncTask tiene una debilidad importante: no maneja bien la Activity "refresh" (por ejemplo, durante la rotación). Puede ser un problema si, por ejemplo, el usuario gira el teléfono mientras su AsyncTask sigue cargando cosas. Si esto es realmente un problema para usted, recomiendo AsyncTaskLoader :

    http://developer.android.com/reference/android/content/AsyncTaskLoader.html

    Estoy de acuerdo con @DeeV y @ebarrenechea sobre el servicio de Intención en parte que debe utilizar para la tarea que no están estrechamente vinculados con la actividad como subir algunos datos al servidor o almacenar datos del servidor a la base de datos.

    Pero a partir de Android 3.0 se introdujeron Loaders API que debería reemplazar AsyncTask. Así por ejemplo, para cargar la lista que debe mostrar en la actividad es mejor utilizar el cargador que está diseñado para manejar bien todos los cambios de configuración y el ciclo de vida de la actividad.

    Tutorial de cargador de Vogella

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.