¿Es la mejor práctica para las tareas de red repetidas?

Tengo una pequeña aplicación de Android en la que tengo que hacer algunas cosas FTP cada par de segundos. Después de aprender de la manera difícil que ejecutar cosas de red en el hilo de la interfaz de usuario es algo que Android realmente no le gusta, he llegado a esta solución:

// This class gets declared inside my Activity private class CheckFtpTask extends AsyncTask<Void, Void, Void> { protected Void doInBackground(Void... dummy) { Thread.currentThread().setName("CheckFtpTask"); // Here I'll do the FTP stuff ftpStuff(); return null; } } // Member variables inside my activity private Handler checkFtpHandler; private Runnable checkFtpRunnable; // I set up the task later in some of my Activitiy's method: checkFtpHandler = new Handler(); checkFtpRunnable = new Runnable() { @Override public void run() { new CheckFtpTask().execute((Void[])null); checkFtpHandler.postDelayed(checkFtpRunnable, 5000); } }; checkFtpRunnable.run(); 

¿Es esta buena práctica realizar una tarea recurrente que no se puede ejecutar directamente en el subproceso de interfaz de usuario? Además, en lugar de crear un nuevo objeto AsyncTask todo el tiempo llamando

 new CheckFtpTask().execute((Void[])null); 

¿Sería una opción para crear el objeto CheckFtpTask una vez y luego reutilizarlo? ¿O eso me dará efectos secundarios?

Gracias de antemano, Jens.

¿Sería una opción para crear el objeto CheckFtpTask una vez y luego reutilizarlo? ¿O eso me dará efectos secundarios?

No, habrá efectos secundarios. Citando los documentos Reglas de subprocesos:

La tarea se puede ejecutar sólo una vez (se producirá una excepción si se intenta una segunda ejecución).

Sólo tendrá que crear una instancia independiente de la tarea cada vez que desee ejecutarla.

Y no estoy seguro de por qué necesita el Runnable o Handler . AsyncTask tiene métodos que se ejecutan en el UI Thread (todo excepto doInBackground() , en realidad) si necesita actualizar la UI .

Compruebe esta respuesta si necesita una devolución de llamada para actualizar la UI al finalizar la tarea.

Debe crear una nueva tarea Async para cada llamada.

Consulte la documentación de Android: AsyncTask . De acuerdo con esta documentación:

La tarea se puede ejecutar sólo una vez (se producirá una excepción si se intenta una segunda ejecución).

Compruebe específicamente la sección de reglas de subprocesos . Hay una respuesta similar aquí, https://stackoverflow.com/a/18547396/2728623

Java ThreadPools y ExecutorFramework le permiten ejecutar subprocesos según sea necesario y reduce la sobrecarga de creación de subprocesos. Echa un vistazo a singleThreadExecutor . El uso de hilo de la piscina es bastante fácil también!

  • Agregar evento semanal al calendario
  • Problema de permiso al iniciar un servicio desde android
  • Ninguna actividad encontrada para manejar Intención {act = android.intent.action.EDIT typ = vnd.android.cursor.item / event
  • La cámara Android no funcionará. StartPreview falla
  • ¿El lienzo no muestra todas las partes dibujadas en Vista personalizada?
  • No se pudo iniciar la aplicación llamando a una URL desde el navegador de Android
  • Android, Volley Solicitud, la respuesta está bloqueando el hilo principal
  • El botón Atrás en Android guarda el contacto en lugar de volver a la aplicación
  • Cómo obtener la referencia de actividad antes de su oncreate se llama durante la prueba
  • Excepción cuando ejecuto mi aplicación desde Eclipse
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.