Práctica recomendada para mostrar los contactos de Android + números de teléfono

¿Cuál es el mejor enfoque desde una perspectiva de rendimiento para mostrar un ListView con contactos y sus números de teléfono?

  • Utilice CursorAdapter con el cursor de contactos y realice la consulta de números de teléfono cuando se invoca bindView para cada fila
  • Copie todos los contactos y números de teléfono en una matriz en memoria en un subproceso de fondo y luego muéstrelos con un ArrayAdapter.
  • ¿Otras soluciones?

En mi opinión, una solución mixta debería ser mejor. ¿Por qué esto? Debido a que usted no sabe o se supone que en la mayoría de los contextos no puede saber acerca de cómo y cuántos contactos de su aplicación tendrá que enumerar . Y también cuántos contactos están almacenados en el teléfono. Si conocemos ambas respuestas, seguramente podemos tomar la solución más aproximada.

Así que te sugiero que primero traigas un número fijo de contactos usando una matriz en memoria en un hilo de fondo, por ejemplo los primeros 20. También si consideras que tu aplicación realizará más de una solicitud a este servicio .. será Impresionante de usar una especie de almacenamiento en caché. El peor enfoque debe ser llamar de nuevo y de nuevo el servicio de contactos. Luego, para una solicitud de contacto # 21, puede traer los próximos 20 y así sucesivamente.

Así que usted puede utilizar las ventajas de ambos mundos, y minimizar las desventajas también. Siempre depende de la aplicación y del contexto del que estamos hablando.

Creo que esto dependería de tres factores:

  1. ¿De cuántos contactos estamos hablando aquí?
  2. ¿Cuánto tiempo se tarda en cargar cada contacto? (Por ejemplo, ¿tiene una vista muy complicada que necesita ser inflada o buscar imágenes de contacto / etc que requiere cualquier E / S de red?)
  3. ¿Cuántos contactos se muestran al usuario a la vez?

Su solución se ajustaría a la mayoría de los casos, aunque la segunda solución ofrece algunas ventajas también:

Solución 1:

Ventaja:

  1. La inflación de la vista retrasada en una "vista a medida que avanza" puede funcionar bien cuando es lo suficientemente rápido como para inflar las vistas sin ningún fallo notable de la interfaz de usuario.

Desventaja:

  1. Si sus contactos se asocian con una gran cantidad de datos y requiere algunos complican la inflación, es posible que note un retraso.

  2. Menos flexible y extensible comparando con la solución 2. Como se analiza a continuación.

Solución 2:

Ventaja:

  1. Usted tiene el control de todos los pasos, por lo que fácilmente puede simular tan fácil como uno, pero la adición de cosas podría ser más fácil: búsquedas a través de toda la memoria, la clasificación personalizada a través de la matriz, etc funcionan mejor cuando usted tiene todo consultado a un Matriz que ya está allí. O si desea realizar cargas personalizadas más tarde o agregar más datos sobre los contactos que requieren un procesamiento más (por ejemplo E / S de red), podría ser un poco más fácil que el adaptador de cursor.

Desventaja:

  1. Ejecución: esta no es la manera de libro de texto para hacerlo. Haciendo cosas más personalizadas le necesitará manejar todos los hilos bien y manejar el aspecto inicial bien. Asegúrese de que las escalas.

Así que sí, dependiendo de lo que exactamente se está trabajando, elegir el adecuado.

Creo que http://www.higherpass.com/Android/Tutorials/Working-With-Android-Contacts/ será una opción. Donde usted puede encontrar todas las instalaciones que desea …

Creo que CursorAdapter es la mejor solución.

También asegúrate de ver este video http://www.youtube.com/watch?v=wDBM6wVEO70 Habla de optimizaciones que en mi opinión son necesarias para hacer que tu lista se desplace sin problemas.

  • Widget ListView con múltiples intentos pendientes
  • ¿Cómo hacer divisor parte de cada elemento en listview en android?
  • Android ListView scrollTo
  • ¿Cómo mostrar la barra de progreso en cada elemento de vista de lista?
  • MotionEvent.ACTION_UP no se llama
  • Cambiar un divisor con setDivider en un ListActivity sin un ListView personalizado?
  • Filtro ListView con CursorLoader y CursorAdapter personalizado
  • Cómo manejar onCheckedChangeListener para un RadioGroup en un adaptador ListView personalizado
  • ¿Por qué ListView y RecyclerView son focusableInTouchMode?
  • Listview en SwipeRefreshLayout - no muestra nada cuando el adaptador personalizado tiene sólo una fila para mostrar
  • ¿Cómo aplicar una transparencia (enfoque?) Al pulsar cualquier elemento (como lo hace Google)?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.