【发布时间】:2020-06-30 19:45:04
【问题描述】:
我有 3 个活动:一个入职活动、一个登录活动和一个第三个活动。当用户第一次打开我的应用程序时,它会在登录活动后进入登录页面,它会要求使用 Firebase 登录谷歌。当用户这样做时,它将开始第三个活动并完成旧的活动,就像这样:
val intent = Intent(baseContext, SkyActivity::class.java)
startActivity(intent)
finish()
但每次用户登录并启动3rd activity 时,都会调用onPause()。它使应用程序崩溃,因为我的 onPause() 停止了我的背景歌曲:
override fun onPause() {
super.onPause()
if (backgroundSongService.isPlaying()) {
backgroundSongService.pauseMusic()
}
}
而此时,我的backgroundSongService 仍然是null(我在我的onCreate 中调用了一个初始化它的函数)。所以我得到了错误:
lateinit property backgroundSongService has not been initialized
但这仅在用户登录时发生。如果他在登录后关闭应用程序并再次打开,他仍然会登录。
所以活动流程将是:OnboardingActivity -> 3rdActivity
OnboardingActivity 将像这样调用第三个活动:
if (firebaseUser != null) {
val intent = Intent(baseContext, SkyActivity::class.java)
startActivity(intent)
finish()
}
就像我在LoginActivity 中的Intent。但不同的是,这一次,onPause 不会在第三个活动中被调用。为什么只在LoginActivity之后调用?
【问题讨论】:
-
您不正确地使用
lateinit。由于歌曲服务可能为空,因此它应该是一个可以为空的参数。然后,您可以对其使用安全调用。backgroundSongService?.run{ if (isPlaying()) pauseMusic() }
标签: android android-studio kotlin android-intent android-activity