Как сгруппировать весь модифицированный сетевой код в отдельный класс и передать ответ без жесткой связи или утечек памяти? MVVM

#android #android-livedata #android-architecture-components #android-viewmodel #android-mvvm

#Android #android-живые данные #android-архитектура-компоненты #android-viewmodel #android-mvvm #android-livedata

Вопрос:

У меня есть класс, который обрабатывает все сетевые операции с использованием модернизации, как показано ниже:

 public class Networking{

public static void getCustomers(final PreviewCustomersViewModel previewCustomersViewModel) {
        final Call<List<Customer>> getCustomersCall = service.getCustomers();

        getCustomersCall.enqueue(new Callback<List<Customer>>() {
            @Override
            public void onResponse(@NonNull Call<List<Customer>> call, @NonNull Response<List<Customer>> response) {
                if (response.isSuccessful()) {
                    previewCustomersViewModel.selectedDistCustomers = response.body();
                    previewCustomersViewModel.isCustomerListRetrieved.setValue(true);
                    //Send Broadcast Msg
                } else {
                    previewCustomersViewModel.isCustomerListRetrieved.setValue(false);
                   //Send Broadcast Msg
                }
            }

            @Override
            public void onFailure(@NonNull Call<List<Customer>> call, @NonNull Throwable t) {
                  previewCustomersViewModel.isCustomerListRetrieved.setValue(false);
                  //Send Broadcast Msg
            }
        });
    }
}
  

Как вы можете видеть, я передаю ссылку на объект ViewModel методу, который выполняет сетевой вызов, и после получения ответа я сообщаю об этом объекту Livedata в этой ViewModel. (Или с помощью широковещательного сообщения)

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

Использование широковещательного сообщения не потребовало бы от меня передачи объекта ViewModel, но хороший ли это подход?

Есть ли лучший способ добиться этого? Может быть, используя RxJava? Или я должен просто сохранить модифицированный код внутри ViewModel? Я хочу реализовать самое чистое решение.

Комментарии:

1. Будет активирован метод onCleared в viewmodel переданного вами действия.. В случае onDestroy, поскольку выполняется Cleared , соответствующая область предотвратит утечку памяти.

2. @kzncrda Но тогда попытка получить доступ к свойству viewmodel в обратном вызове модернизации приведет к ошибке, верно?

3. Я не рекомендую использовать модифицированные процессы в ViewModel.

4. @kzncrda Итак, хорош ли мой подход?

5. К ViewModel подключен статический метод. Мое предложение. Начиная с расширения прав и возможностей из единого центра. Управление вашими операциями вызова в информационном пуле.