📱 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:
- Wywołuje
Triggers.fire(APP_FOREGROUNDED)przy wejściu na pierwszy plan - Wywołuje
Triggers.fire(APP_BACKGROUNDED)przy przejściu do tła - Publikuje eventy do
EventBus
Cleanup
// Usuń callbacki
ADict.AppState.clearCallbacks()
// Reset (do testów)
ADict.AppState.reset()