📱 AppState

Reaktywny manager stanu aplikacji

Opis

Moduł AppState śledzi stan lifecycle aplikacji (foreground/background) z precyzyjnym śledzeniem aktywności i sesji. Automatycznie integruje się z Triggers i EventBus.

Obserwowanie stanu

// Flow
ADict.AppState.state.collect { state ->
    when (state) {
        AppState.State.FOREGROUND -> resumeOperations()
        AppState.State.BACKGROUND -> pauseOperations()
        AppState.State.INITIALIZING -> showSplash()
    }
}

// Callbacks
ADict.AppState.onForeground {
    refreshData()
    checkPendingNotifications()
}

ADict.AppState.onBackground {
    saveState()
    pauseMusic()
}

// Callback na zmianę stanu
ADict.AppState.onStateChange { from, to ->
    analytics.log("app_state_changed", mapOf(
        "from" to from.name,
        "to" to to.name
    ))
}

Sprawdzenie stanu

if (ADict.AppState.isInForeground()) {
    showInAppMessage()
}

if (ADict.AppState.isInBackground()) {
    scheduleBackgroundWork()
}

Śledzenie Activity

// Callback na zmianę Activity
ADict.AppState.onActivityChanged { activity ->
    analytics.trackScreen(activity.javaClass.simpleName)
}

// Pobierz aktualną Activity
val currentActivity = ADict.AppState.getCurrentActivityOrNull()

Sesje

// Informacje o sesji
val session = ADict.AppState.getCurrentSession()
println("ID: ${session?.id}")
println("Czas trwania: ${session?.durationMs}ms")
println("Ekrany: ${session?.screenCount}")
println("Eventy: ${session?.eventCount}")

// Callback na nową sesję
ADict.AppState.onNewSession { session ->
    analytics.trackSessionStart(session.id)
}

// Dodaj metadane do sesji
ADict.AppState.setSessionMetadata("user_type", "premium")
ADict.AppState.recordSessionEvent()

// Konfiguracja timeout sesji (domyślnie 30s)
ADict.AppState.setSessionTimeout(60_000L)  // 1 minuta

Stany aplikacji

Stan Opis
INITIALIZING Aplikacja się inicjalizuje
FOREGROUND Aplikacja jest na pierwszym planie
BACKGROUND Aplikacja jest w tle

Snapshot stanu

val snapshot = ADict.AppState.getSnapshot()

println("Stan: ${snapshot.state}")
println("Activity: ${snapshot.currentActivityName}")
println("Sesja: ${snapshot.sessionId}")
println("Czas sesji: ${snapshot.sessionDurationMs}ms")
println("Foreground: ${snapshot.totalForegroundTimeMs}ms")
println("Background: ${snapshot.totalBackgroundTimeMs}ms")
println("Activity stack: ${snapshot.activityStackDepth}")
println("Zmiany stanu: ${snapshot.stateChangeCount}")

Historia zmian stanu

val history = ADict.AppState.getStateHistory(limit = 20)

history.forEach { change ->
    println("${change.timestamp}: ${change.from} -> ${change.to}")
    println("Activity: ${change.activity}")
}

Integracja z innymi modułami

AppState automatycznie:

Cleanup

// Usuń callbacki
ADict.AppState.clearCallbacks()

// Reset (do testów)
ADict.AppState.reset()