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:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user