我的启动器活动,即MainActivity在使用AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
时被示例化了两次,这导致了两次网络调用并产生了奇怪的行为。
有没有什么可以控制它,让它只初始化一次?我试过使用launchMode =“singleTop”和“singleInstance”
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
mRequestQueue = Volley.newRequestQueue(this)
Log.e(TAG,"Skillet")
loadStateData()
initializeListeners()
}
字符串
4条答案
按热度按时间oalqel3c1#
在尝试了我的一些做法后找到了解决办法
字符串
在onCreate()的super之前调用暗模式函数
它将防止两次示例化活动
e5nqia272#
活动在某些场景中重新启动,比如方向改变,这没有什么错。
而不是阻止Activity重新启动,这是其生命周期的一部分,你可以做的另一件事,也是我鼓励你做的事情是使用ViewModel来处理这些任务,因为它在推荐的应用架构中被推荐,这样当你的Activity重新启动并要求其ViewModel时:
字符串
它重用相同的ViewModel,任务继续执行,就像什么都没有发生一样。
实际上,如果你想遵循这种架构,任务应该在存储库中完成,但是ViewModel应该负责它,并且在Activity重新启动时不会重新创建它。
我建议你做AndroidKotlin基础05.1 codelab关于这一点。
nxagd54h3#
为那些使用“绑定”的人找到了解决方案
这很有趣,但工作:
字符串
20jt8wwn4#
如果上述任何一种解决方案都不起作用;
字符串