0

我正在尋找一些設計模式來使用Android應用程序中的一組Activity。我目前正在開發一個應用程序,我覺得它會在用戶界面的很多修訂之前進行,直到它的「最終」版本(如果有的話)。我在模式中使用Service中的控制器思考了一些問題,但我找不到任何好的例子。我發現唯一常見的參考是使用AIDL進行進程間接口綁定,這將不適用。Android MVC設計模式

基本上我想是用於Activity實現諸如showLoginScreen()loginError()等使得任何UI應該能夠實現(該控制器不直接依賴於該視圖中,只有它的接口)定義的Interface。如果這是最簡單的方法來實現這一點,那麼獲取句柄到活動Activity s的最佳接受方式是什麼?我一直很困惑當你調用一個不活動的Activity上的方法時會發生什麼。

我正在考慮沿着Application類中的Map行作爲單例嗎? Mapput()/remove()將被連接到onStart()onPause()。儘管如此,這仍然不能保證Activity仍然存在...可以通過密鑰上的get()獲得參考,然後在Service有機會調用其接口之前它可以是paused()

任何建議或見解,將不勝感激。

編輯:我已經看過其他職位如MVC pattern on Android但他們大多沒有解決執行(和接受的答案我只是平了不同意反正)

+0

爲什麼你想要有多個活動?每個活動是否代表您在MVC中的視圖? – Noel 2011-06-11 23:54:09

+0

每個Activity都是一個用戶需要與之交互的獨立屏幕。他們不會嘗試完成相同任務的多項活動。除了全屏3D遊戲,我不知道只有一個活動的任何應用程序。 – Ryan 2011-06-11 23:58:01

+0

您是否考慮過使用單個Activity作爲您的控制器,然後在運行時動態切換屏幕/視圖? – Noel 2011-06-12 00:04:54

回答

1

要使用你的活動之間的觀察者/可觀察模式和您的服務,您將需要使用Bound services

這樣,您可以獲得IBinder的句柄,它可以充當您的Observable,您不必擔心AIDL。您可以確保服務已被綁定到您的ServiceConnection中的onServiceConnected()方法中。請記住,只要存在與其綁定的活動,您的服務就會處於活動狀態,否則它將被停止。

我會推薦閱讀android Bound Services文檔,因爲它很好地解釋了使用情況。

+0

非常感謝。你能否澄清一下,如果活動註冊爲服務的觀察者會發生什麼,然後一個事件被解僱,迭代所有註冊的觀察者,並遇到一個不活躍的事件? – Ryan 2011-06-12 17:22:43

+0

我實際上會取消註冊該活動的onPause()或onStop()中的服務並解除綁定。然後,再次在o​​nResume()或onStart()中綁定到服務,並在onServiceConnected()中註冊偵聽器。在我的onServiceConnected()中,我會問IBinder(或者任何你觀察的),看看我在模型中觀察到的最新版本。這是否適用於你正在嘗試做的事情? – Noel 2011-06-12 17:57:26

+0

是的,它的確如此,我感興趣的是什麼「種族」條件,如果有的話...我們將會看到= P再次感謝。 – Ryan 2011-06-12 18:37:09