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)
- ¿Es este uso apropiado de AsyncTask?
- Si es así, ¿puedo extender AsyncTask en su lugar?
- ¿Cuál es la diferencia entre extender
AsyncTask
yAsyncTask<Void, Void, Void>
Ejemplo de código:
- Desactivar grupo de menús de Android
- Android Studio - cómo utilizar bibliotecas (de proyectos eclipse)
- Error: No se puede abrir el archivo de clase R.java
- Cambiar la conectividad de Android con Robolectric
- Constructor público para clase anidada
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
- Error en la negociación de Android de la señal R Native Android
- ¿Cómo puedo bloquear archivos en android usando código java?
- ¿Puede una clase extender dos clases?
- Org.apache.http.entity.ContentType ya no está en Apache?
- ¿Qué pasa con este hilo que se puede ejecutar al final una vez que se ha completado?
- ¿Por qué el método onNewIntent (intento de intención) es llamado dos veces?
- Detectar los límites de un documento en una imagen usando opencv java
- Vector de etiqueta dibujable no válido - appcompat-v7: 24.1.1
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.
- Cómo personalizar la barra de acciones contextuales utilizando appCompat en el diseño de materiales
- Android: error libGL.so: no se puede abrir archivo de objeto compartido: No existe tal archivo o directorio