¿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.
- ¿View.setVisibility (View.VISIBLE) obliga a la vista a volver a dibujar incluso si ya es visible?
- Android ProGuard: Optimizaciones más agresivas
- Proguard con OrmLite en Android
- ¿Cómo puedo activar adecuadamente ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS?
- ¿Cómo hacer que RecyclerView recicle dentro de NestedScrollView?
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.
- Un método más eficiente de dibujar miles de partículas (Java / Android)
- Evitar que Proguard elimine elementos estirables específicos
- OpenCV: Optimización del cálculo del flujo óptico
- Cómo reducir el tiempo de arranque en los sistemas operativos de Android.
- Prueba NEON-optimizado cv :: threshold () en el dispositivo móvil
- ¿Cómo podemos optimizar (cpu & ram) esta animación de salpicadura personalizada de android?
- Bucle eficiente a través de la lista de Java
- Demasiadas actividades en Android?
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é?
- ¿El yieldIfContendedSafely () pierde los beneficios de una transacción?
- Presionado por defecto MenuItem con el borde de 9 parches después de Android Studio 2.2