perf(android): ленивый плеер записей, O(n) merge каталога, @Immutable, лог только в debug

- RecordingPlaybackController: ExoPlayer создаётся лениво (на первый play) и
  освобождается в stop() — раньше второй плеер висел в памяти всю сессию у каждого.
  Поллер позиции 500мс крутится только во время игры (был вечный 2 Гц main-loop).
- StationRepositoryImpl.refreshStations: merge каталога O(n) через apiById/apiByName
  индексы вместо .find на каждую станцию (было O(n²) ~700×700 на холодном старте).
  Убраны verbose Log.d-трейсы (оставлен Log.e/.w на ошибки).
- Track/Station/StreamQuality помечены @Immutable — read-only модели, иначе
  списки tags/qualities делали класс нестабильным → лишние рекомпозиции списков.
- HttpLoggingInterceptor только при BuildConfig.DEBUG (включён buildConfig feature):
  в релизе нет оверхеда на каждый запрос и утечки URL в logcat.
This commit is contained in:
nk
2026-06-06 17:13:48 +03:00
parent f423344d13
commit 84c2b33473
6 changed files with 80 additions and 50 deletions

View File

@@ -1,5 +1,11 @@
package com.radiola.domain.model
import androidx.compose.runtime.Immutable
// @Immutable: модели read-only (заполняются один раз из БД/маппера и не мутируются).
// Список tags/qualities иначе делает класс «нестабильным» для Compose → лишние
// рекомпозиции списков станций. Помечаем явно — компилятор сможет пропускать.
@Immutable
data class Station(
val id: Int,
val name: String,
@@ -15,6 +21,7 @@ data class Station(
)
/** Один вариант качества потока станции. */
@Immutable
data class StreamQuality(
val bitrate: Int, // kbps
val url: String,