Android ¿Cómo sincronizar una vista de diseño?

Tengo un Diseño de tabla, Dentro de un Vista de desplazamiento, que se actualiza constantemente por un Tarea asíncrona.

No sé si es "legal" agregar/eliminar filas para Tarea asíncrona cuando al mismo tiempo el usuario puede estar desplazando el TableLayout.

¿Cómo puedo asegurarme de que la actualización no interfiere con el desplazamiento en la GUI?

¿O el sistema operativo se encarga de esto por mí?

preguntado el 03 de mayo de 12 a las 20:05

1 Respuestas

En Android, el subproceso principal en el que se ejecuta su aplicación es el único subproceso que puede actualizar la interfaz de usuario. Si intenta modificar el contenido de su diseño desde una AsyncTask, obtendrá un error. Tareas asincrónicas onPreExecute y onPostExecute Sin embargo, los métodos se ejecutan en el subproceso principal, por lo que puede actualizar la interfaz de usuario allí.

Entonces, para responder a su pregunta, sí, el sistema operativo se encarga de esto al no permitir actualizaciones de interfaz de usuario asíncronas.

contestado el 03 de mayo de 12 a las 23:05

¿Qué hay de onProgressUpdate()? También se ejecuta en el hilo principal, ¿no? ¿Estará bien agregar filas allí? En caso afirmativo, ¿necesito sincronizarlo o simplemente agregar la Fila normalmente? - ilomambo

onProgressUpdate() también se ejecuta en el hilo principal. Está totalmente bien agregar o eliminar filas en ese método. Sin embargo, el usuario podrá interactuar con su aplicación mientras esto sucede, por lo que probablemente notará que las filas se agregan y eliminan si están viendo la lista. Siempre y cuando solo estén mirando los artículos, esto estará bien. Es posible que te encuentres con algunas situaciones extrañas si las filas tienen detectores de clics, pero nunca probé lo que estás describiendo, así que no estoy seguro. - MattDavis

Una cosa más, es importante tener en cuenta que si permite que el usuario cambie de actividades mientras AsyncTask se está ejecutando, continuará en segundo plano. La actividad no se destruirá ni se recolectará basura hasta que se complete, y su tarea esencialmente tomará ciclos sin hacer nada. Esto no debería hacer que su aplicación se bloquee directamente, ya que todos los componentes de la interfaz de usuario y las variables de clase se mantienen en la memoria hasta que se destruyan, pero podría generar problemas como un error OOM más adelante o, según la versión de Android que se esté ejecutando, bloquear el futuro. AsyncTask se ejecute porque se está utilizando el subproceso. - MattDavis

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.