我處於同樣的情況。最後,我決定做這樣的事情:
活動或片段超出範圍,他們不知道MVP什麼,但我想使用事件總線像奧托發送信號/事件,所以:
我的擴展某種Presenter的類對Android Context一無所知,但它們只有onAttachPresenter和onDetachPresenter,它們只有一個MvpView接口。
擴展Service的類將有一個Presenter屬性,並實現一些帶有onSucess,onError,onStart,onComplete或類似Otto的事件(onSucessEvent,onErrorEvent,onStartEvent,onCompleteEvent)的MvpView接口。
因此,當我需要做某件事時,活動或片段將啓動服務,服務將「開始」或與演示者交談,當演示者成功完成時,將調用mvpView.onSuccess()並存儲信息在本地數據庫中使用SQLite(可能是storeIO),最後服務會調用Otto並傳遞信號(沒有任何數據),可能是onComplete。 最後,信號將被我的用戶界面捕獲(可能是碎片),並在SQLite中檢索數據庫中的所有信息。
因此,當onSucess發生時,用戶界面將顯示最新的和最好的數據,但是當發生onError時(至少)會顯示一些信息(或者不是如果你想要)向用戶說「有問題,但至少你可以看到一些東西「,bot onSuccess和onError畢竟會調用onComplete。
不知道這是否是最好的解決方案,但在這種情況下,我認爲我不打算處理Activities或Fragments生命週期,並且不關心onSaveInstance並在用戶旋轉設備時恢復數據。它會一直提取數據庫中的最新數據,如果發生什麼事情(無法連接互聯網),您至少可以在收到onComplete信號時顯示一些信息。
一些事實,我還在想:
- 演示者將不會是一個單獨的類
- 演示一無所知上下文,但肯定與所有MyApplication類
- 如果一個屏幕,會發生什麼(片段)你有不同的服務與不同的onSuccessEvents?只需使用某種行爲作爲ID,即可識別它們。
- 永遠不要讓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