Android活动在使用黑暗模式时被实例化两次

Android活动在使用黑暗模式时被实例化两次,android,android-activity,android-lifecycle,android-darkmode,Android,Android Activity,Android Lifecycle,Android Darkmode,我的启动程序活动,即MainActivity在使用 AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE\u NIGHT\u YES) 这导致了两次网络通话并做出了奇怪的行为 是否有任何方法可以控制此操作并使其仅初始化一次?。 我尝试过使用launchMode=“singleTop”和“singleInstance” 在某些情况下,活动会重新启动,比如方向改变,这没有什么错 与阻止活动重新启动(这是其生命周期的一部分)不同,您可

我的启动程序活动,即MainActivity在使用
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE\u NIGHT\u YES)
这导致了两次网络通话并做出了奇怪的行为

是否有任何方法可以控制此操作并使其仅初始化一次?。 我尝试过使用launchMode=“singleTop”和“singleInstance”


在某些情况下,活动会重新启动,比如方向改变,这没有什么错

与阻止活动重新启动(这是其生命周期的一部分)不同,您可以做的另一件事,也是我鼓励您做的事,就是按照中的建议使用来处理此任务,以便在活动重新启动并请求其ViewModel时:

viewModel = ViewModelProviders.of(this).get(MainActivityViewModel::class.java)
它重用相同的ViewModel,任务继续执行,就好像什么都没有发生一样

实际上,如果您想遵循该体系结构,任务应该在存储库中完成,但是ViewModel应该负责它,并且在活动重新启动时不会重新创建它


我建议您对此采取相应措施。

在尝试了我的一些做法后找到了解决方案

override fun onCreate(savedInstanceState: Bundle?) {
    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    }
在onCreate()的super之前调用暗模式函数


它将阻止两次实例化活动

为什么在活动中而不是在应用程序类中这样做
setDefaultNightMode
始终执行活动的重新创建。因为您的配置已更改。也许您只是将api调用移动到另一个活动生命周期方法中?
override fun onCreate(savedInstanceState: Bundle?) {
    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    }