Соединение сокета с MVVM

#java #android #mvvm

#java #Android #mvvm

Вопрос:

Я пытаюсь создать приложение для чата с архитектурой MVVM, но я не знаю, куда поместить мой класс подключения к сокету, мне нужна идея или отправная точка и т. Д.

Принцип единого источника данных

Я использую единый источник данных принципа истинности. Итак, пример: если сообщение приходит в приложение с сервера сокетов, мой класс сокетов должен сохранить его в БД, а затем передать его из БД наблюдателям (чтобы они были моделями просмотра), используя текущие данные.

Моя архитектура приложения

Мое приложение содержит различные действия (экран чата, экран разговоров и т. Д.), И эти действия будут соответствовать моему классу хранилища соединений с сокетами. Также, если пользователь закроет приложение, мое соединение с сокетом исчезнет вместе с приложением. Я не хочу никакого фонового подключения.

О чем я спрашиваю?

Каков наилучший способ реализовать эту функциональность:

1) Класс сокета должен использовать текущие данные, потому что activites будет наблюдать за ним. Так что это должно быть хранилище. 2) Мой класс сокета должен всегда работать, пока приложение открыто.

Что я должен использовать для хранилища сокетов? Служба или одноэлементный класс или что-то другое? Что вы предлагаете? Где я должен запустить репозиторий соединений с сокетами? Из класса приложения или что-то другое?

Ответ №1:

Ознакомьтесь с новой архитектурой LiveData и жизненного цикла Android в новой библиотеке компонентов Arch.

С его помощью вы можете наблюдать объект LiveData из любого действия или фрагмента. Он запускается с вашего приложения, получает уведомления о любых изменениях жизненного цикла и умирает вместе с вашим приложением. Также: не уничтожается при изменениях конфигурации.

Единственная проблема заключается в том, что должна быть какая-то инициализация объекта LiveData. Это можно сделать в классе App. Или в activity, если ваше приложение представляет собой одноступенчатую архитектуру.

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

1. Я уже использую новую библиотеку компонентов arch. У меня слишком много действий, поэтому мой репозиторий сокетов должен начинаться с класса приложения, верно? Но я не знаю, как получить этот репозиторий сокетов из моделей представления, потому что он создается из класса приложения

2. Да, но LifecycleObserver не привязан к классу App, его должно быть возможно использовать из любого места.

3. каким было ваше решение?

4. Привет, Толгай, не мог бы ты поделиться фрагментом кода для того же?

5. Я знаю, что уже поздно.. просто хочу знать, имеет ли установка сокета с внедрением зависимостей (@Singleton с использованием Hilt) такое же поведение, как и его создание в приложении? Какой из них лучший способ сделать это?