OpisDescription
Moduł AppState śledzi stan lifecycle aplikacji (foreground/background) z precyzyjnym śledzeniem aktywności i sesji. Automatycznie integruje się z Triggers i EventBus.The AppState module tracks app lifecycle state (foreground/background) with precise activity and session tracking. Automatically integrates with Triggers and EventBus.
Obserwowanie stanuObserving State
// 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 stanuState check
if (ADict.AppState.isInForeground()) {
showInAppMessage()
}
if (ADict.AppState.isInBackground()) {
scheduleBackgroundWork()
}
Śledzenie ActivityActivity Tracking
// Callback na zmianę Activity
ADict.AppState.onActivityChanged { activity ->
analytics.trackScreen(activity.javaClass.simpleName)
}
// Pobierz aktualną Activity
val currentActivity = ADict.AppState.getCurrentActivityOrNull()
SesjeSessions
// 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 aplikacjiApp States
| StanState | OpisDescription |
|---|---|
INITIALIZING |
Aplikacja się inicjalizujeApp is initializing |
FOREGROUND |
Aplikacja jest na pierwszym planieApp is in the foreground |
BACKGROUND |
Aplikacja jest w tleApp is in the background |
Snapshot stanuState Snapshot
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}")
HistoriaHistory zmian stanu
val history = ADict.AppState.getStateHistory(limit = 20)
history.forEach { change ->
println("${change.timestamp}: ${change.from} -> ${change.to}")
println("Activity: ${change.activity}")
}
IntegracjaIntegration z innymi modułami
AppState automatycznie:AppState automatically:
- Wywołuje
Triggers.fire(APP_FOREGROUNDED)przy wejściu na pierwszy planCallsTriggers.fire(APP_FOREGROUNDED)when entering foreground - Wywołuje
Triggers.fire(APP_BACKGROUNDED)przy przejściu do tłaCallsTriggers.fire(APP_BACKGROUNDED)when going to background - Publikuje eventy do
EventBusPublishes events toEventBus
CleanupCzyszczenie
// Usuń callbacki
ADict.AppState.clearCallbacks()
// Reset (do testów)
ADict.AppState.reset()