Acceder

Ver la Versión Completa : [ CONSULTA ] Problema con Fragments


kaiser75
28/06/16, 11:49:39
Vereis, tengo un problema con unos fragments, al pulsar para abrir el fragment desde el navigationView este se ralentiza bastante hasta que se abre del todo, me crea unos lags muy molestos ( parece touchwiz :risitas: ), esto me pasa con todos los fragments de la aplicacion pero a medida que vas usando la aplicacion se van haciendo mas fluidos. Los fragmentos solamente incluyen una lista que muestra unos textos y pequeñas imagenes, hay manera de poblar la lista en un hilo separado por ejemplo?

kriogeN
28/06/16, 12:41:56
Vereis, tengo un problema con unos fragments, al pulsar para abrir el fragment desde el navigationView este se ralentiza bastante hasta que se abre del todo, me crea unos lags muy molestos ( parece touchwiz :risitas: ), esto me pasa con todos los fragments de la aplicacion pero a medida que vas usando la aplicacion se van haciendo mas fluidos. Los fragmentos solamente incluyen una lista que muestra unos textos y pequeñas imagenes, hay manera de poblar la lista en un hilo separado por ejemplo?

Poblar el RecyclerView no, debe hacerse en primer plano. Generar la lista de donde obtiene los datos si puedes hacerlo en segundo plano.

mocelet
28/06/16, 14:59:23
Tendrías que identificar dónde tarda tiempo, si en la obtención de datos inicial, en la preparación de la lista para el adapter o en la preparación de cada vista de la lista (el getView).

Si es porque necesitas un proceso inicial de carga siempre puedes poner una vista que diga "cargando" antes de mostrar la lista. Y la carga de datos en background claro. Así no hay lag y el usuario sabe que tiene que esperar un poco.

Otra opción es que esa carga la haga cada elemento de la lista, no tiene sentido cargar cosas que no se van a mostrar. En ese caso el lag se trasladará al hacer scroll, que no será fluido porque el getView se tomará su tiempo. Ahí la mejor solución es meter una AsyncTask, que la vista se cree rápidamente y en background cargue la imagen, procese el texto o lo que tenga que hacer. Aunque el contenido esté incompleto al mostrar la lista, el lag desaparece y el contenido aparecerá tan pronto se cargue. En ese caso, acuérdate de cancelar la tarea al reciclar la vista.

Esta última opción es la que implementan por dentro bibliotecas que facilitan mostrar imágenes u otros recursos en vistas mostrando una imagen por defecto mientras no se ha cargado.

Dexafree
29/06/16, 09:31:31
hay manera de poblar la lista en un hilo separado por ejemplo?

Lo que puedes hacer es obtener los datos en otro hilo (que si los estas obteniendo de internet ya lo estarás haciendo, ya que Android no permite hacer peticiones a la red en primer plano).
Añadir los datos a la lista debe hacerse en primer plano, como te ha dicho kriogeN.


Esta última opción es la que implementan por dentro bibliotecas que facilitan mostrar imágenes u otros recursos en vistas mostrando una imagen por defecto mientras no se ha cargado.

Eso iba a decir mientras leia tu respuesta. Picasso tiene una opcion de especificar un placeHolder mientras la imagen no se ha cargado todavia: http://square.github.io/picasso/ :ok:

kaiser75
30/06/16, 12:24:08
Tendrías que identificar dónde tarda tiempo, si en la obtención de datos inicial, en la preparación de la lista para el adapter o en la preparación de cada vista de la lista (el getView).

Si es porque necesitas un proceso inicial de carga siempre puedes poner una vista que diga "cargando" antes de mostrar la lista. Y la carga de datos en background claro. Así no hay lag y el usuario sabe que tiene que esperar un poco.

Otra opción es que esa carga la haga cada elemento de la lista, no tiene sentido cargar cosas que no se van a mostrar. En ese caso el lag se trasladará al hacer scroll, que no será fluido porque el getView se tomará su tiempo. Ahí la mejor solución es meter una AsyncTask, que la vista se cree rápidamente y en background cargue la imagen, procese el texto o lo que tenga que hacer. Aunque el contenido esté incompleto al mostrar la lista, el lag desaparece y el contenido aparecerá tan pronto se cargue. En ese caso, acuérdate de cancelar la tarea al reciclar la vista.

Esta última opción es la que implementan por dentro bibliotecas que facilitan mostrar imágenes u otros recursos en vistas mostrando una imagen por defecto mientras no se ha cargado.

Pues igual es eso, porque las listas que tengo usan un Adapter personalizado, pero no uso el metodo ViewHolder (voy a pelo sin reciclar :sisi1: ...maaal) ya que solo muestra unos 18/20 elementos por lista, el ViewHolder me daba problemas al hacer scroll, me duplicaba unos textos que solo deben mostrarse en determinadas posiciones de la lista y que cambian de color y estos me salian en unas cuantas posiciones erroneas.

mocelet
30/06/16, 13:52:24
Por los síntomas que comentabas, reciclar o no es lo de menos. Eso solo ahorra leer el layout y crear el objeto de la vista. Y principalmente afecta a la fluidez del scroll, no al lag de la aplicación.

El problema es algo que se ejecuta en el hilo principal y tarda mucho tiempo y que conforme usas la app no hace falta hacerlo más. Algo de inicialización que, o bien haces en background o bien lo troceas para que se haga bajo demanda al mostrarse en la lista.