在这种情况下,我很难理解问题。
我有一个用于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()
中被调用。
这么说,我们一次只跟踪一个屏幕,因为当用户转换到新屏幕时,将调用onStop()
和onStart()
。
因此,即使screenName是静态的,每次调用生命周期方法时,都会重新分配该静态var。由于一部手机不能同时运行2个活动,因此一次只能有1个跟踪器实例处于活动状态。
虽然我知道最佳实践表明应该为每个新实例创建screenName
,但我在这里并没有真正看到使用静态方法的问题。我看错了方向吗?
答案 0 :(得分:0)
您可以做到。
类似这样的两个主要模式是静态变量和方法或单例(这通常是静态的,因此您可以从不同路径使用它而无需传递它)。这两种方法在功能上都是相同的。
静态类的底片是:
这些还不错,您可以和他们一起生活-但是,如果您使用单身人士,那么这些问题都不存在。您可以轻松地将其传递,更改其行为,将其转换为使用注入而不是单例模式,…
所以我无法真正提出使用静态方法的理由,没有任何优势。