¿Algún consejo sobre cómo acelerar esto en Android?

En una Actividad, estoy haciendo esto:

  • Cada minuto, actualizo la localización del GPS a la nube.
  • Luego, después de actualizar la ubicación, descargo una lista de 10 personas y sus iconos … y los actualizo en la lista. (Cada icono es 80×80 y aproximadamente 2Kb)

Esto se hace cada minuto, una y otra vez.

Mi problema es: ¿Parece ser un poco lento? A veces, cuando paseo por la lista, es lento? Y cuando hago clic, la respuesta no es inmediata … y puede requerir un poco de espera.

¿Crees que puedo solucionar esto con múltiples "hilos" o algo así? Por favor avise. Gracias.

Editar: Cuando está cargando los nombres y los iconos de usuario en la lista … es prácticamente inutilizable. La lista se congela … y no puede desplazarse hacia arriba o hacia abajo. Y cuando no se está cargando … la lista pasa muy lentamente.

Para acciones como descargar cosas "en" una actividad siempre es útil tener servicios de fondo para hacer el trabajo para la actividad que luego se mantiene sensible! Si tratas de hacer cosas como eso dentro de la Actividad en sí, sin duda tienes problemas con la capacidad de respuesta, te puedo asegurar! Así que: mi respuesta es – sí. Implementar un servicio de fondo para eso!

El subproceso y el almacenamiento en caché son probablemente buenas ideas. Si su lista es sólo diez personas (10 veces 2kB de memoria, 20 kB), entonces considere el uso de una lista en caché para la interfaz de usuario y actualizarlo después de cada descarga. Compruebe la clase AsyncTask introducida con Android 1.5 para esto. Un simple ejemplo de código podría verse así:

mCachedList; private void onUpdate(Location location) { DownloadTask refresh = new DownloadTask(location); refresh.execute(); } private class DownloadTask extends AsyncTask<Location, void, ArrayList<ListItem> { protected ArrayList<ListItem> doInBackground(Location... params) { final ArrayList<ListItem> refreshlist = new ArrayList<ListItem>; Location location = params[0]; sendToCloud(location); while(!done) { ListItem next = downLoadPerson(); refreshlist.add(next); } return refreshlist; } protected void onPostExecute(ArrayList<ListItem> refreshlist) { mCachedList = refreshlist; } } 

Utilice la lista en caché para la interfaz de usuario hasta que finalice la tarea en segundo plano y se actualice. Hay cosas más avanzadas que usted podría hacer para ahorrar más memoria como reutilizar el refreshlist etc, pero espero que lo anterior proporciona cierta información sobre cómo hacer esto en el fondo. También recuerda reutilizar la conversión en tu lista para evitar una gran cantidad de recolección de basura en cada elemento cuando estás desplazándose en la lista.

A menos que logre descargar toda la información en una solicitud, ganará tiempo al enhebrarla. Además, ¿es realmente necesario descargar los iconos una y otra vez? Tal vez usted puede almacenar en caché?

  • Cómo utilizar -assumenosideeffects clase android.util.Log en mi aplicación
  • ¿Por qué proguard procesa AndroidManifest.xml?
  • Optimización de SQLite para aplicaciones de Android
  • Optimización del compilador de código Java en Android
  • Precisión del sueño del hilo
  • Ajustes de optimización de Proguard: Habilitar la combinación de clases, los modelos y el campo / * en versiones modernas de API y Proguard
  • ¿Deshacer / rehacer rápidamente con el patrón del memento / comando?
  • Precisión del sueño del hilo
  • Acelerando las operaciones de punto flotante (Android ARMv6)
  • Optimizaciones de Scrollview
  • ¿Canvas.getClipBounds asigna un objeto Rect?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.