android - SplashActivity 在冷启动时做了一个小跳跃
问题描述
对于我的SplashActivity
,我使用LiveData
和的组合ViewModel
来验证使用 Firebase 身份验证的用户。
LiveData
:
class FirebaseAuthLiveData(private val auth: FirebaseAuth): LiveData<Boolean>(), FirebaseAuth.AuthStateListener {
override fun onAuthStateChanged(auth: FirebaseAuth) {
value = auth.currentUser == null
}
override fun onActive() {
super.onActive()
auth.addAuthStateListener(this)
}
override fun onInactive() {
super.onInactive()
auth.removeAuthStateListener(this)
}
}
ViewModel
:
class FirebaseAuthViewModel: ViewModel() {
val repository = FirebaseAuthRepository()
fun getAuthState(): LiveData<Boolean> {
return repository.getFirebaseAuthState()
}
}
存储库:
class FirebaseAuthRepository {
private val auth = FirebaseAuth.getInstance()
fun getFirebaseAuthState(): FirebaseAuthLiveData {
return FirebaseAuthLiveData(auth)
}
}
SplashActivity
:
class SplashActivity : AppCompatActivity() {
private lateinit var firebaseAuthViewModel: FirebaseAuthViewModel
private lateinit var firebaseAuthLiveData: Unit
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setTheme(R.style.SplashTheme)
firebaseAuthViewModel = ViewModelProvider(this).get(FirebaseAuthViewModel::class.java)
firebaseAuthLiveData = firebaseAuthViewModel.getAuthState().observe(this, { UserSignedOut ->
val intent = if (UserSignedOut) {
Intent(this, LoginActivity::class.java)
} else {
Intent(this, MainActivity::class.java)
}
startActivity(intent)
})
}
}
现在的问题是当我启动我的应用程序时,它SplashActivity
确实像一个小跳跃。LoginActivity
在进入或之前,它会很快上升然后下降MainActivity
。
现在,我的旧SplashActivity
的没有使用LiveData
,ViewModel
看起来像这样,没有发生小跳:
class SplashActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
setTheme(R.style.SplashTheme)
super.onCreate(savedInstanceState)
Firebase.auth.setLanguageCode("en")
}
override fun onStart() {
super.onStart()
val user = Firebase.auth.currentUser
val intent = if (user != null) {
Intent(this, MainActivity::class.java)
} else {
Intent(this, LoginActivity::class.java)
}
startActivity(intent)
finish()
}
}
如何修复我的LiveData
,ViewModel
或 Repository 类以确保在我的应用程序启动时不会发生小跳转SplashActivity
?
解决方案
推荐阅读
- ruby - 带有自定义命令的 Ruby 自定义 shell
- c# - Mono 无法访问文件,即使 linux shell 可以在没有 root 的情况下访问
- css - 为什么背景大小/封面的 CSS 简写不再有效?(2019 年 12 月)
- c - Redirecting stdin to children makes the program not terminate
- ansible - 在创建 VM 时强制使用静态 IP
- r - How do I make my charts full screen in flexdashboards?
- c# - 如何计算从现在到未来某个日期的剩余时间
- authentication - Active Directory SSO Authentican 导致为每个请求打开新选项卡
- spring-boot - java.lang.IllegalStateException:提交响应后无法转发问题迁移到 SpringBoot 2
- swift - 滑块值不会更新值,除非它被移动