← Назад к вопросам

Что делал интересное за последнее время

1.3 Junior🔥 201 комментариев
#Опыт и софт-скиллы

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Мои последние проекты и профессиональный рост

За последний год я погрузился в Modern Android Development с упором на Compose Multiplatform, Jetpack Compose и архитектурные паттерны. Вот ключевые направления:

1. Коммерческий проект на Compose Multiplatform

Разрабатывал финансовое приложение для Android, iOS и десктопа с общим Kotlin-кодом. Цель — достичь 90% кодовой базы на KMP (Kotlin Multiplatform). Вот пример архитектуры модуля:

// commonMain/shared/src/commonMain/kotlin/feature/auth/AuthViewModel.kt
class AuthViewModel(
    private val authRepository: AuthRepository
) : ViewModel() {
    private val _state = MutableStateFlow(AuthState())
    val state: StateFlow<AuthState> = _state.asStateFlow()
    
    fun login(email: String, password: String) {
        viewModelScope.launch {
            _state.update { it.copy(isLoading = true) }
            val result = authRepository.login(email, password)
            _state.update { 
                it.copy(
                    isLoading = false,
                    user = result.getOrNull(),
                    error = result.exceptionOrNull()?.message
                )
            }
        }
    }
}

2. Кастомизация UI в Jetpack Compose

Создавал сложные кастомные компоненты с Canvas API:

  • Анимированные графики для визуализации данных
  • Интерактивные диаграммы с жестами drag & zoom
  • Кастомные системные UI (например, плеер с волновой формой аудио)
@Composable
fun WaveformVisualizer(
    amplitudes: List<Float>,
    isPlaying: Boolean
) {
    Canvas(modifier = Modifier.fillMaxWidth().height(80.dp)) {
        val path = Path()
        val barWidth = size.width / amplitudes.size
        
        amplitudes.forEachIndexed { index, amplitude ->
            val x = index * barWidth
            val height = amplitude * size.height
            
            path.moveTo(x + barWidth / 2, center.y - height / 2)
            path.lineTo(x + barWidth / 2, center.y + height / 2)
        }
        
        drawPath(
            path = path,
            color = Color.Blue,
            style = Stroke(width = 3.dp.toPx(), cap = StrokeCap.Round)
        )
    }
}

3. Внедрение современных инструментов

  • Migrated от LiveData к StateFlow/SharedFlow в существующем проекте
  • Внедрил модульную архитектуру с динамическими feature-модулями
  • Настроил CI/CD с GitHub Actions для автоматического тестирования и публикации

4. Эксперименты с производительностью

Проводил оптимизацию Compose-приложений:

  • Использовал remember, derivedStateOf, snapshotFlow для минимизации рекомпозиций
  • Реализовал кастомный LayoutModifier для сложных измерений
  • Настраивал базовые линии производительности с Macrobenchmark
@ExperimentalAnimationApi
@Composable
fun OptimizedImageGrid(images: List<ImageData>) {
    LazyVerticalGrid(
        columns = Adaptive(minSize = 120.dp),
        contentPadding = PaddingValues(8.dp)
    ) {
        items(
            items = images,
            key = { it.id } // Ключ для стабильной идентификации
        ) { image ->
            ImageCard(
                image = image,
                modifier = Modifier
                    .animateItemPlacement() // Анимация перестановки
                    .fillMaxWidth()
            )
        }
    }
}

5. Изучение передовых практик

  • Разбирался с контекстными приемниками (Context Receivers) в Kotlin
  • Исследовал скриптовый Gradle с Kotlin DSL для улучшения сборки
  • Пробовал KSP (Kotlin Symbol Processing) для генерации кода вместо KAPT

Выводы и направления развития

Эксперименты с Compose Multiplatform показали огромный потенциал для кросс-платформенной разработки, хотя и выявили сложности с нативными интеграциями. Jetpack Compose продолжает развиваться, становясь более производительным и гибким. В ближайших планах — углубление в машинное обучение на устройстве с ML Kit и оптимизация энергопотребления приложений.

Что делал интересное за последнее время | PrepBro