Должен ли я кэшировать маркер BitmapDescriptor в Android?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Должен ли я кэшировать маркер BitmapDescriptor в Android?

Сообщение Anonymous »

В моем приложении для Android я показываю тысячи маркеров на Картах Google и кэширую BitmapDescriptor каждого маркера.
Хороший ли это подход к кэшированию BitmapDescriptor? Если да, правильно ли я делаю?
При отображении большого количества маркеров пользовательский интерфейс подтормаживает
object MarkerIconCache {
// Cache size based on typical number of unique marker types you expect
private const val CACHE_SIZE = 1000

data class MarkerKey(
val number: String,
val date: String
)

private val iconCache = object : LruCache(CACHE_SIZE) {
override fun entryRemoved(
evicted: Boolean,
key: MarkerKey,
oldValue: BitmapDescriptor,
newValue: BitmapDescriptor?
) {
// Clean up bitmap resources when removed from cache
oldValue.let {
if (it is BitmapDescriptor) {
// Optional: Release any resources if needed
}
}
}
}

fun clearCache() {
iconCache.evictAll()
}

fun getMarkerIcon(context: Context, data: MapUI): BitmapDescriptor {
// Cache key based only on color since the bitmap really only varies by color
val key = MarkerKey(
number = data.name,
date = data.Date
)
return iconCache.get(key) ?: createRectangleMarkerBitmap2(
context = context,
text = data.number,
).also {
iconCache.put(key, it)
}
}


Использование в компоновке
@Composable
fun MapMarkers(
mapViewModel: MapVM,
) {
val mapData by mapViewModel.markerData.collectAsStateWithLifecycle()
val context = LocalContext.current

//getting bitmap from cache
val markerIcons = remember(mapData) {
mapData.associateWith { data-> getMarkerIcon(context, data) }
}

//this function adjust markers if they are in same place
val adjustedMarkers = remember(mapData) { createAdjustedMarkers(mapData) }

adjustedMarkers.forEach { (data, position) ->
val markerState = MarkerState(position = position)
Marker(
state = markerState,
icon = markerIcons[data] )
}
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... in-android
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Должен ли я кэшировать маркер BitmapDescriptor в Android?
    Anonymous » » в форуме Android
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Должен ли я кэшировать и повторно использовать MTKMeshBufferAllocator?
    Anonymous » » в форуме IOS
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Метод Java должен кэшировать результаты
    Anonymous » » в форуме JAVA
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Запретить Gradle кэшировать сгенерированный код версии Android
    Anonymous » » в форуме Android
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Кэшировать видео в приложении Android
    Anonymous » » в форуме Android
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»