У меня проблемы с пониманием проблемы в этом сценарии.
У меня есть класс, используемый для отслеживания Google Analytics, давайте назовем его FlurryTracker
, у него есть 2 метода StartTrackingScreen(ScreenName)
и StopTrackingScreen()
.
Теперь, если у меня есть статическая переменная с именем screenName
, и каждый раз, когда экран отслеживания запуска вызывается, screenName
переназначается.
startTrackingScreen(activity: Activity, screen: DhTracker.Screen<T>) {
screenName = screen.getName()
val lastScreen = Singleton.getLastScreen()
//If last screen is not same as current screen
FlurryAgent.logEvent(screenName, true)
}
}
override fun stopTrackingScreen() {
//New screen will start tracking before lastScreen tracking is stopped.
if (enabled) {
FlurryAgent.endTimedEvent(Singleton.getLastScreen()?.getName())
}
}
companion object{
lateinit var screenName : String
}
Эти методы вызываются в onStart()
и onStop()
в самом приложении.
Итак, с учетом сказанного, мы отслеживаем только 1 экран за раз, потому что когда пользователь переходит на новый экран, будут вызываться onStop()
и onStart()
.
Таким образом, несмотря на то, что screenName является статическим, каждый раз при вызове методов жизненного цикла эта статическая переменная переопределяется.Поскольку на телефоне не может быть запущено 2 актива одновременно, одновременно будет активен только 1 экземпляр моего трекера.
Я не вижу здесь проблемы с использованием статики, хотяЯ знаю, что лучшие практики говорят, что screenName
должно создаваться с каждым новым экземпляром.Я смотрю на это неправильно?