나는 같은 상황에 있습니다. 마지막으로 나는 이런 식으로 뭔가를하기로 결정 :
활동 조각이 범위를 벗어나, 그들은 MVP에 대해 아무것도 몰라하지만 난 그래서, 신호/이벤트를 보낼 오토 같은 이벤트 버스를 사용하기 위하여려고하고있다 :
어떤 종류의 Presenter를 확장하는 내 클래스는 Android Context에 대해 모르고 있지만 onAttachPresenter 및 onDetachPresenter 만있는 MvpView 인터페이스를 갖습니다.
Service를 확장하는 클래스는 Presenter 특성을 가지며 onSucess, onError, onStart, onComplete 또는 Otto에 대한 동일한 이벤트 (onSucessEvent, onErrorEvent, onStartEvent, onCompleteEvent)와 함께 일부 MvpView 인터페이스를 구현합니다.
그래서 뭔가를해야 할 때 활동이나 단편이 서비스를 시작하고 서비스가 "시작"하거나 발표자와 이야기 할 것이며 발표자가 성공하면 mvpView.onSuccess()를 호출하여 정보를 저장합니다 SQLite (storeIO 어쩌면)를 가진 로컬 DB 내부에서 그리고 마지막으로 Service는 Otto를 호출하고 아마도 onComplete (아마 아무런 데이터없이) 신호를 전달할 것입니다. 마지막으로 신호가 내 UI (조각 일 가능성이 있음)에 의해 catch되고 SQLite에서 DB 내의 모든 정보를 검색합니다.
그래서 onSucess가 발생하면 UI에 가장 최신의 최상의 데이터가 표시되지만 onError가 발생하면 사용자에게 "적어도 문제가 있지만 (원하는 경우) 정보를 표시합니다. 뭔가를 볼 수 있습니다. ", bot onSuccess 및 onError는 결국 onComplete를 호출합니다.
이것이 최선의 해결책인지는 모르겠지만이 경우에는 사용자가 기기를 회전 할 때 활동 또는 단편 수명주기를 다루지 않고 onSaveInstance를 신경 쓰지 않고 데이터를 복원 할 것입니다. 그것은 DB 내부에서 항상 최신 데이터를 가져오고, 어떤 일이 발생하면 (인터넷에 연결되어 있지 않은 경우) onComplete 신호를받을 때 적어도 뭔가를 보여줄 수 있습니다.
일부 사실 난 아직도 생각하고 :
- 발표자는 싱글 톤 클래스되지 않습니다를
- 발표자하여 MyApplication 클래스의 경우 한 화면에 대해 어떻게됩니까
- (단편과 네 컨텍스트에 대해 아무것도 알고 있지만,) 당신은 다른 onSuccessEvents와 차별화 된 서비스를 가지고 있습니까? ID로 일종의 행동을 사용하여 식별하십시오.
- Activity Fragment가 MvpView를 구현하지 못하게하면 라이프 사이클을 처리해야합니다. 당신이 정확히 일치하지 않을 수도 있지만
데이터 모델의 일부분이 아닙니까? – pskink
@pskink 서비스는 데이터를 데이터베이스에만 저장합니다. 이것은 무엇입니까. 복용량을 모델로 간주해야한다는 의미입니까? MVP의 목적이 Java 코드에서 안드로이드 코드를 분리하는 것이기 때문에 혼란 스럽습니다. 그렇다면 모델로 내 서비스를 위협한다면 잘못하지 않았을까요? –
일종의 사용자 정의 ContentProvider를 사용하고 있습니까? 그렇다면 https://github.com/googlesamples/android-architecture/tree/todo-mvp-contentproviders/ (일반적으로 https://github.com/googlesamples/android-architecture) – pskink