簡體   English   中英

Android服務應該在MVP模式中扮演什么角色?

[英]What role an Android Service should play in the MVP pattern?

我正在開發一個人類活動識別的Android應用程序。

它基本上就是這樣 - 服務不斷讀取加速器數據並將識別的活動(即步行,運行)存儲在數據庫中。 用戶可以在活動中查看ListView中的所有已識別活動(訪問數據庫)。 數據庫中的每個User表都有一個pa_goal(物理活動目標)字段,服務從數據庫中讀取該字段並進行一些檢查。

當然,用戶可以從活動中更改此目標。 因為我將實現MVP架構模式。

我不確定在哪里提供服務? 肯定不是View。 有什么建議?

在一個干凈的架構中,我假設您正在使用MVP,這就是將框架與業務邏輯分離的想法。 這基本上是普通演示者允許您做的事情。

在這種情況下,它不是你正在處理的觀點,但原則是相似的。 當您可以將它們分離出來以獲得更好,更單一的責任類時,您不希望將所有業務或應用程序邏輯混合在Android代碼中。 所以我會說,雖然它不是一個視圖,你仍然應該有一個演示者類型類(可能更好地稱為控制器或管理器)。

這個類將是一個POJO,它控制您的服務行為,使用標准的junit測試和服務模擬可以輕松測試。 然后可以將此類和服務放入其自己的功能包中,並以與演示者相同的方式與后端模型進行交互。

因此,總而言之,該角色是您的應用的另一個功能,即網站與其他功能(通常只是我的經驗中的視圖)。

希望有所幫助

這篇文章在類似的情況下幫助了我,雖然可能不完全是你的,但這個想法是一樣的:

https://android.jlelse.eu/android-bound-services-and-mvp-12ca9f70c7c7

基本上,作者圍繞這樣一個事實,即綁定服務與活動緊密耦合,並為其添加額外的生命周期調用。

我處於同樣的境地。 最后我決定做這樣的事情:

活動或片段超出范圍,他們對MVP一無所知但是我將使用像Otto這樣的事件總線來發送信號/事件,所以:

擴展某種Presenter的我的類對Android上下文一無所知,但它們將有一個MvpView接口,只有onAttachPresenter和onDetachPresenter。

擴展Service的類將具有Presenter屬性,並使用onSucess,onError,onStart,onComplete或類似的東西實現一些MvpView接口,以及Otto(onSucessEvent,onErrorEvent,onStartEvent,onCompleteEvent)的相同事件。

因此,當我需要執行某些操作時,Activity或Fragment將啟動該服務,該服務將“啟動”或與Presenter交談,當演示者成功完成時將調用mvpView.onSuccess()並將信息存儲在本地數據庫中使用SQLite(也許是storeIO),最后服務將調用Otto並傳遞信號(沒有任何數據),可能是onComplete。 最后,我的UI(可能是片段)將捕獲信號,並在SQLite中檢索數據庫中的所有信息。

因此,當onSucess發生時,UI將顯示最新和最佳數據但是當onError發生時將(至少)顯示一些信息(或者如果你想要的話),對用戶說“有問題,但至少你可以看到一些東西” ,bot onSuccess和onError畢竟會調用onComplete。

不知道這是否是最佳解決方案,但在這種情況下,我認為我不打算處理活動或碎片生命周期,也不關心onSaveInstance並在用戶旋轉設備時恢復數據。 它總是會獲取數據庫中的最新數據,如果發生了某些事情(沒有互聯網連接),您至少可以在收到onComplete信號時顯示某些內容。

我仍在思考的一些事實:

  • 演示者不會是單身人士
  • Presenter對Context一無所知,但對MyApplication類一無所知
  • 如果對於一個屏幕(片段),您有不同的服務與不同的onSuccessEvents會發生什么? 只需使用某種操作作為ID即可識別它們。
  • 永遠不要讓Activity Fragment實現MvpView,你將不得不處理生命周期。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM