Android Активность становится экземпляром дважды при использовании Dark Mode - PullRequest
0 голосов
/ 09 апреля 2020

Мое действие по запуску, т.е. 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()
}

Ответы [ 2 ]

2 голосов
/ 09 апреля 2020

Действия перезапускаются в некоторых сценариях ios как изменение ориентации, в этом нет ничего плохого.

Вместо того, чтобы препятствовать перезапуску активности, которая является частью ее жизненного цикла, еще одна вещь, которую вы могли бы делать и то, что я рекомендую вам сделать, это использовать ViewModel для выполнения этих задач, как это рекомендуется в рекомендуемой архитектуре приложения , чтобы при перезапуске вашей активности и запросе ее ViewModel:

viewModel = ViewModelProviders.of(this).get(MainActivityViewModel::class.java)

он использует ту же ViewModel, и задачи продолжаются, как будто ничего не произошло.

На самом деле, если вы хотите следовать этой архитектуре, задачи должны выполняться в репозитории, но ViewModel должен отвечать за него, и он не будет воссоздан при перезапуске действия.

Я рекомендую вам выполнить кодовую метку Android Kotlin Основы 05.1 .

0 голосов
/ 10 апреля 2020

Нашел решение после нескольких попыток

override fun onCreate(savedInstanceState: Bundle?) {
    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    }

Вызов функции темного режима перед super onCreate ()

Это предотвратит создание экземпляра активности дважды

...