2010-11-30 22 views
17

¿Cuáles son las diferencias entre estos métodos (clases)?Android Asynctask vs Runnable vs timertask vs Servicio

Quiero ejecutar una aplicación que se ejecuta cada 5 segundos, borrar la memoria cuando haya terminado y cuando la CPU esté en modo de espera, puede ejecutar la aplicación. Para que la aplicación no esté ligada a un wakelock.

Saludos,

Shafqat

+0

Puede depender de lo que va a hacer. Supongo que no desea que la IU aparezca cada 5 segundos, por lo que la ejecuta en segundo plano y procesa algo cada 5 segundos. – CrackerJack9

Respuesta

31

La diferencia entre los tres primeros es sólo la cantidad de trabajo que se ha hecho por ti. Y un Service es un fundamental Android application component.

AsyncTask como una clase de conveniencia para hacer algún trabajo en un nuevo hilo y utilizar los resultados en el hilo del que fue llamado (por lo general el hilo de interfaz de usuario) cuando haya terminado. Es solo un contenedor que usa un par de ejecutables pero maneja todas las complejidades de crear el hilo y manejar los mensajes entre los hilos.

La Runnable interfaz está en el núcleo de enhebrado de Java. La interfaz Runnable debe implementarse por cualquier clase cuyas instancias estén destinadas a ser ejecutadas por un hilo.

TimerTask es parte del estándar Java y se puede utilizar para la ejecución diferida o repetida de algún fragmento de código (Ejecutable). Su uso es discouraged on Android. Puede usar un controlador en su lugar.

Un servicio se puede utilizar como una parte independiente y sin interfaz de usuario de su aplicación Android. Se puede ejecutar y crear sus propios hilos y se puede iniciar para la interfaz de usuario o con Intenciones a través de un AlarmManager por ejemplo.

Creo que lo que quiere es un servicio que crea su propio hilo y hace algún trabajo. Cuando finalice el trabajo, la memoria se liberará en Android cuando el recolector de basura se ponga en marcha, algo que no se controla y eso es algo bueno.

El AlarmManager le permite transmitir Intentos a intervalos específicos e incluso permitir el control para reactivar el dispositivo o no. Solo tiene que definir un BroadcastReceiver en su Servicio y declararlo en su manifiesto.

La última parte de tu pregunta no la entiendo, así que por favor aclara un poco más sobre lo que intentas lograr.

+0

Todavía no entiendo cómo un Servicio es diferente de un Runnable ..? Parece que puedo usar un ejecutable en lugar de un Servicio. Además, ¿qué método se llama en Service? por ejemplo, como run() en Runnable() –

Cuestiones relacionadas