В моем приложении для 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
Должен ли я кэшировать маркер BitmapDescriptor в Android? ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1729920357
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] )
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79127060/should-i-cache-marker-bitmapdescriptor-in-android[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия