2012-03-15 9 views
15

Estoy utilizando AsyncTask para cargar datos en la interfaz de usuario. Escribí el código para descargar datos del servidor en un método diferente y estoy llamando a ese método desde doinBackground. Dará error porque los métodos de IU no pueden acceder desde doInBackground. Pero, quiero acceder. cualquier proceso alternativo está allí para acceder al método de la interfaz de usuario de doinBackground.Android: Llamar a los métodos en el subproceso de interfaz de usuario desde el método AsincrTask doInBackground

Respuesta

47

cualquier proceso alternativa existe para acceder a la interfaz de usuario del método doinBackground.?

Llame publishProgress() en doInBackground(). Ponga su lógica de actualización de UI en onProgressUpdate() de su AsyncTask. onProgressUpdate() se invocará en el subproceso de aplicación principal (a.k.a., subproceso de UI) después de llamar al publishProgress(). Here is a sample project demostrando esto.

+14

El nombre de CommonsWare es suficiente. +1. –

+0

+1 para la respuesta clara –

+0

conocía el método runOnUiThread(), pero le gustó el otro método de manejo de este +1. – Deva

7

llamada runOnUiThread (acción Ejecutable)

more here

+0

hola puedo llamar runOnUiThread() desde doInBackground.? Que va a funcionar.? O como siempre puedo llamar runOnUiThread de alcrear sí mismo.? Aquí tengo una duda. RunOnUiThread bloqueará la interfaz de usuario, mientras cargando datos.? –

+0

tiene sentido cuando lo llamas desde doInBackground() .. o si no tiene ningún significado ... – ngesh

+0

tienes que escribir runOnUIThread donde actualizas tu interfaz de usuario principal. –

1

Como han señalado los demás, puede usar runOnUiThread. Pero, parece un poco extraño que quieras hacer eso en tu doInBackground. Si quiere indicar el progreso al usuario, debería manejarlo en AsyncTask.onProgressUpdate y llamar a publishProgress en doInBackground.

Puede leer más sobre AsyncTask aquí: http://developer.android.com/reference/android/os/AsyncTask.html

-Dan

1

Uso doInBackground() sólo para tareas que:

  1. tomar algún tiempo
  2. No están UI relacionado

Luego puede implementar AsyncTask.onPostExecute() para ejecutar código para manejar esos resultados en la interfaz de usuario del hilo principal AsyncTask

De Javadoc para AsyncTask.onPostExecute():

"se ejecuta en el subproceso de interfaz de usuario después de doInBackground. ... "

Cuestiones relacionadas