Kotlin Как обновить пропускную способность при закрытии приложения?

Я хочу обновить данные в Firebase после завершения работы приложения. Как мне это сделать

Я использовал onDestroy и onPause, но они не выполняли нужную мне функцию. Когда я использую OnPause, каждый раз, когда приложение переходит в фоновый режим, оно выполняет операцию обновления, а мне этого тоже не хочется.

// This onDestroy  didn't work OnPause, every time the application goes to the background

override fun onDestroy() {
    super.onDestroy()
    Log.d("ClosingService", "Service is destroyed. Updating user data...")
    Update_User_Data(dataManager.userDataList)
}


 fun Update_User_Data(newDataList : ArrayList<User_Structure>){
            val tasks = newDataList.map { i ->
            val userRef = db.collection("users").document(i.userId)
            userRef.update(mapOf(
                "username" to i.username,
                "favorites" to i.favorites,
                "parts" to i.parts,
                "points" to i.points
            ))
            }
            Tasks.whenAllComplete(tasks).addOnCompleteListener {
                if (it.isSuccessful) {
                    println("All user data updated successfully!")
                } else {
                    println("Error updating some user data.")
                }
            }
    }

«пользователь закрывает приложение» — как вы это понимаете?

CommonsWare 05.07.2024 17:26

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

Doug Stevenson 05.07.2024 17:43

Я хочу обновить данные в Firebase после завершения работы приложения.

Umut.jpg 05.07.2024 18:14

Нет никакой гарантии, что onDestroy() будет вызван — приложение может «внезапно» завершиться по ряду причин. Вместо этого вы можете посмотреть что-то вроде onSaveInstanceState().

MarsAtomic 05.07.2024 20:41

@MarsAtomic Спасибо, я сделал, как вы сказали, спасибо за помощь.

Umut.jpg 06.07.2024 15:17
0
5
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я использовал OnDestroy и OnPouse, но они не выполняли нужную мне функцию.

Имейте в виду, что onDestroy не всегда вызывается . Так что на это нельзя полагаться. Как уже упоминал @MarsAtomic в своем комментарии, вам следует рассмотреть возможность использования onSaveInstanceState() вместо этого:

Вызывается для получения состояния каждого экземпляра активности перед ее уничтожением, чтобы состояние можно было восстановить в onCreate(Bundle) или onRestoreInstanceState(Bundle).

Спасибо, я сделал то, что вы сказали, и настроил отправку запросов только при обновлении объекта данных. Если у меня возникнет проблема, на этот раз я сохраню избранное локально, выполню там операции с любимыми словами и настрою обновление других данных после тестовых решений.

Umut.jpg 06.07.2024 15:13

Другие вопросы по теме

Конфигурация flutterfire возвращает «zsh: команда не найдена: flutterfire» на Mac
«Для привязки переменной в условии требуется инициализатор» — ошибка при создании Firebase iOS SDK
Обновление документа Firestore несколько раз с помощью функции триггера события перезаписывает или прекращает обновление после нескольких триггеров
Как настроить и протестировать push-уведомления Firebase Cloud Messaging (FCM) с помощью API HTTP v1 с помощью Postman?
Получение идентификатора клиента приложения, использующего вход в Google
Ни один из моих проектов реагирования, развернутых на Firebase, не работает
При перезаписи отображается пустая страница. Приложение Flutter, размещенное на хостинге Firebase
Регистрация во Flutter с использованием Firebase не работает
Гарантирует ли Firestore FieldValue.serverTimestamp() уникальную строгую согласованность?
Генкит, использующий контекст и инструменты ретривера, вызывает ошибку