Repository navigation
Micro Optimizaciones Implementadas3
Juan Manuel Bermudez Vasquez edited this page May 19, 2025
·
2 revisions
Glide.with(holder.itemView.context)
.load(album.cover)
.apply(RequestOptions()
.diskCacheStrategy(DiskCacheStrategy.ALL))
.into(holder.albumImage)- Uso de
DiskCacheStrategy.ALLpara almacenar imágenes en disco - Caché de imágenes para reducir el consumo de datos
- Carga eficiente de imágenes con redimensionamiento automático
- Uso de
ViewHolderpara reutilizar vistas - Reducción de llamadas a
findViewById - Mejor rendimiento en listas largas
android:clipToPadding="false"
android:overScrollMode="never"
android:scrollbars="none"- Desactivación de efectos de scroll innecesarios
- Optimización de rendimiento en desplazamiento
- Reducción de sobrecarga visual
viewModelScope.launch(Dispatchers.Default) {
withContext(Dispatchers.IO) {
val data = repository.refreshData()
_data.postValue(data)
}
}- Uso de
Dispatchers.IOpara operaciones de red - Uso de
Dispatchers.Defaultpara operaciones de CPU - Mejor gestión de hilos y recursos
- Carga de datos bajo demanda
- Implementación de paginación en listas
- Reducción de consumo de memoria
albumReleaseDate.text = "Lanzamiento: ${album.releaseDate.take(10)}"- Uso de
take()para limitar longitud de strings - Formateo eficiente de fechas
- Reducción de procesamiento innecesario
layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)- Implementación de scroll horizontal eficiente
- Optimización para diferentes tamaños de pantalla
- Mejor experiencia de usuario
private val _eventNetworkError = MutableLiveData(false)
private val _isNetworkErrorShown = MutableLiveData(false)- Sistema robusto de manejo de errores
- Prevención de crashes
- Mejor experiencia de usuario
companion object {
private var instance: NetworkServiceAdapter? = null
fun getInstance(context: Context) =
instance ?: synchronized(this) {
instance ?: NetworkServiceAdapter(context).also {
instance = it
}
}
}- Implementación de Singleton para servicios
- Reducción de instancias innecesarias
- Mejor gestión de memoria
private val requestQueue: RequestQueue by lazy {
Volley.newRequestQueue(context.applicationContext)
}- Inicialización perezosa de recursos
- Mejor gestión de memoria
- Optimización de inicio de aplicación
fun formatBirthDateLegacy(dateString: String): String {
val inputFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.US)
val outputFormat = SimpleDateFormat("d 'de' MMMM 'de' yyyy", Locale("es", "ES"))
val date = inputFormat.parse(dateString)
return outputFormat.format(date ?: Date())
}- Uso de
Localeespecífico para formateo - Manejo eficiente de fechas
- Mejor internacionalización
- Se ha implementado un sistema de caché en memoria utilizando el patrón Singleton para garantizar una única instancia del gestor de caché.
- El
CacheManagermantiene cuatro tipos de datos en caché:- Tracks (pistas musicales)
- Albums (álbumes)
- Musicians (músicos)
- Albums por músico
-
Reducción de llamadas a la red:
- Los datos se almacenan en memoria después de la primera solicitud
- Las solicitudes subsecuentes se sirven desde la caché
- Se evitan llamadas innecesarias al servidor
-
Mejor rendimiento:
- Acceso instantáneo a datos frecuentemente utilizados
- Reducción de latencia en la interfaz de usuario
- Menor consumo de datos móviles
Los repositorios (AlbumRepository, MusicianRepository, AlbumDetailRepository, MusicianDetailRepository) implementan una lógica de caché inteligente:
-
Verificación de Caché:
val potentialResp = cache.getAlbums() return if (potentialResp.isEmpty()) { // Obtener de la red } else { // Usar caché }
-
Manejo de Errores:
- Implementación de bloques try-catch para manejar fallos de red
- Retorno de listas vacías en caso de error para evitar crashes
- Configuración optimizada de memoria para el proceso de compilación:
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
- Uso de AndroidX para mejor gestión de recursos
- Implementación de
android.nonTransitiveRClass=truepara reducir el tamaño de las clases R
Este reporte muestra que el proyecto Vinilos ha implementado varias microoptimizaciones significativas, especialmente en el manejo de datos y la gestión de memoria, lo que resulta en una aplicación más eficiente y con mejor rendimiento.
- Retrospectiva - Incepción
- Diseño Arquitectónico
- APK V1.0.2
- Estrategia de pruebas
- Inventario de pruebas
- Resultado de la Estrategia de pruebas
- Reunión semana 4
- Retrospectiva Iteración 1
- Diseño Arquitectónico
- APK V1.0.4
- Estrategia de pruebas
- Inventario de pruebas
- Resultado de la Estrategia de pruebas
- Reporte del Perfilamiento de la aplicación
- Micro-Optimizaciones Implementadas
- Reunión semana 5
- Reunión semana 6
- Gráfica de Velocidad - Iteración 1
- Reflexión sobre la Estimación - Iteración 1
- Retrospectiva Iteración 2
- Diseño Arquitectónico
- APK V1.0.5
- Estrategia de pruebas
- Inventario de pruebas
- Resultado de la Estrategia de pruebas
- Reporte del Perfilamiento de la aplicación
- Micro-Optimizaciones Implementadas
- Reunión semana 7
- Reunión semana 8
- Gráfica de Velocidad - Iteración 2
- Reflexión sobre la Estimación - Iteración 2
- Reporte de accesibilidad