Я в той же ситуации. В конце концов я решил сделать что-то вроде этого:
деятельности или фрагменты из области видимости, они ничего не знаю о ПМК знаю, но я буду использовать шину событий, как Отто посылать сигналы/события, так:
Мои классы, которые продюсируют своего презентатора, ничего не знают об Android-контексте, но у них будет интерфейс MvpView, только с onAttachPresenter и onDetachPresenter.
Класс, который расширяет Service, будет иметь атрибут Presenter и реализует некоторый интерфейс MvpView с onSucess, onError, onStart, onComplete или что-то в этом роде и те же события для Otto (onSucessEvent, onErrorEvent, onStartEvent, onCompleteEvent).
Поэтому, когда мне нужно что-то сделать, действие или фрагмент запустит службу, служба «начнет» или поговорит с докладчиком, а когда ведущий закончит с успехом, вызовет mvpView.onSuccess() и сохранит информацию внутри локальной БД с SQLite (возможно, storeIO), и, наконец, Служба вызовет Отто и передаст сигнал (без каких-либо данных на нем), возможно, onComplete. Наконец, сигнал будет улавливаться моим пользовательским интерфейсом (возможно, фрагмент) и получить всю информацию внутри БД в SQLite.
Итак, когда происходит onSucess, пользовательский интерфейс отобразит последние и лучшие данные, но если onError произойдет, то (по крайней мере) покажет некоторую информацию (или нет, если хотите), сказав пользователю: «возникла проблема, но, по крайней мере, вы может что-то увидеть », bot onSuccess и onError в конце концов вызовут onComplete.
Не знаю, является ли это лучшим решением, но в этом случае я думаю, что не буду заниматься жизненным циклом деятельности или фрагментов и не заботится о onSaveInstance и восстанавливать данные, когда пользователь поворачивает устройство. Он всегда будет получать последние данные внутри БД, и если что-то произойдет (нет подключения к Интернету), вы можете хотя бы показать что-то, когда получаете сигнал onComplete.
Некоторые факты я до сих пор думаю:
- Презентатор не будет класс синглтон
- Presenter ничего не знает о контексте, но да с MyApplication класса
- Что произойдет, если на одном экране (Фрагмент) у вас есть разные сервисы с разными на SouccessEvents? Просто используйте какое-то действие как идентификатор, чтобы идентифицировать их.
- Никогда не делайте Activity Fragment реализует MvpView, вам придется иметь дело с жизненным циклом.
его часть вашей модели данных, не так ли? – pskink
@pskink служба хранит данные только в базе данных. Это то, что делает. Доза, которая означает, что я должен рассматривать ее как Модель? Я запутался, так как цель MVP заключается в том, чтобы отделить код Android от кода Java, поэтому, если я буду угрожать моей службе как модели, я не делаю это неправильно? –
, вы используете пользовательский 'ContentProvider'? если да, посмотрите на https://github.com/googlesamples/android-architecture/tree/todo-mvp-contentproviders/ (и https://github.com/googlesamples/android-architecture в целом) – pskink