#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) такое же поведение, как и его создание в приложении? Какой из них лучший способ сделать это?