Extendiendo AsyncTask <Void, Void, Void>

En mi aplicación android estoy realizando algunas operaciones en doInBackground extendiendo la AsyncTask<Void, Void, Void> . (No tengo ningún uso en la realización de cualquier interfaz de usuario en esta clase)

  1. ¿Es este uso apropiado de AsyncTask?
  2. Si es así, ¿puedo extender AsyncTask en su lugar?
  3. ¿Cuál es la diferencia entre extender AsyncTask y AsyncTask<Void, Void, Void>

Ejemplo de código:

 public class MessagePooling extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void... params) { while (!isCancelled()) { //Getting data from server SystemClock.sleep(1000); } return null; } } 

O:

 public class MessagePooling extends AsyncTask { @Override protected Object doInBackground(Object... params) { while (!isCancelled()) { //Getting data from server SystemClock.sleep(1000); } return null; } } 

Gracias

La clase AsyncTask se puede considerar como un mecanismo de roscado muy conveniente. Le da algunas herramientas que usted puede utilizar que los hilos simples de Java simplemente no tienen como en cancelan operaciones de la limpieza. Usted no tiene que hacer ninguna interfaz de usuario en el fondo. Usted podría simplemente ejecutar uno escribiendo uno como una clase anónima como esta:

  new AsyncTask<Integer, Void, Void>(){ @Override protected Void doInBackground(Integer... params) { // **Code** return null; } }.execute(1, 2, 3, 4, 5); 

Se ejecutará lo que se pone en doInBackground en un hilo de fondo con los parámetros dados. Del mismo modo, simplemente puede utilizar Void y ejecutar sin parámetros.

La única ventaja que podría pensar en ejecutar un hilo de esta manera sería ayudar en el mantenimiento futuro. Puede que haya un caso en el que desee modificar ciertas cosas que se requieren para estar en el subproceso de interfaz de usuario, en cuyo caso anularía los otros métodos. Otros casos sería que usted simplemente no hacer la acción suficiente para justificar la escritura de otra clase, por lo que sólo crear uno sobre la marcha y ser hecho con él.

EDITAR:

Para responder # 3: son efectivamente los mismos. El objeto Void es un objeto Java como cualquier otra cosa. No estás usando Void , así que lo que usas en su lugar no importa. Es sólo el contrato AsyncTask requiere tres tipos de clases que se pasan en, y por defecto son Object que es la clase de línea de base de todo.

(No tengo ningún uso en la realización de cualquier interfaz de usuario en esta clase)

A continuación, utilice la clase Thread normal en lugar de utilizar la clase AsyncTask que está diseñada para tratar con cambios de interfaz de usuario durante el tiempo de vida del subproceso:

 Runnable r = new Runnable() { @Override public void run() { // your code here } }; Thread t = new Thread(r); t.start(); 

¿Es este uso apropiado de AsyncTask?

Usted no dijo cuál es su meta. Pero AsyncTask se utiliza generalmente para las tareas largas y la actualización de la interfaz de usuario durante el trabajo exactamente para notificar algún cambio de progreso de algún trabajo largo. También es una herramienta muy eficiente, de tipo seguro y más compleja que Handler, por ejemplo.

¿Cuál es la diferencia entre extender AsyncTask y AsyncTask

AsyncTask es un tipo genérico y debe usar genéricos con ellos es el código más rápido, más seguro de tipo.

No tengo ningún uso en la realización de cualquier interfaz de usuario

Por lo tanto, puede utilizar Handler o interfaz Runnable clásica y sólo puede trabajar con los subprocesos de trabajo básicamente.

Nota: Generalmente, el uso de tipos de genéricos hace que el código sea más rápido, la mayoría de tipo seguro. También la siguiente ventaja es la comprobación de tipo fuerte en el código fuente de compilación, las restricciones de conversiones explícitas, etc.

  • Android.provider.Settings.Secure.ANDROID_ID devuelve "android_id"
  • ¿Cómo cambio el valor TextView dentro del código Java?
  • ¿Cómo puedo bloquear el teléfono mediante programación Android?
  • ¿Cómo usar la consulta de Firebase equalTo (value, key)?
  • ¿Cómo implementar PdfRenderer Zoom y Scroll apoyo?
  • ¿Cómo escribir letras árabes separadas?
  • FileInputStream a la matriz de bytes en la aplicación de Android
  • Implementación de paquetes parecidos a Spring en Android
  • ¿Cómo utilizar Flowable en RxJava 2?
  • Map.clear () vs nuevo Mapa: ¿Cuál será mejor?
  • Android Keystore Error "no pudo generar clave en keystore"
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.