2013-05-12 44 views
1

我試圖使用Activity-Service-Messenger的模式來交流我的活動和服務。 (如在這裏解釋http://viktorbresan.blogspot.mx/2012/09/intentservice-and-inter-process.html)基本上它說我應該在我的Activity中創建一個Handler,然後創建一個Messenger並通過putExtra()發送到我的服務。該服務然後將郵件發送到使用Messenger的活動。問題與android.os.Messenger和android.os.Handler與輪換

我的問題是,如果我旋轉模擬器,與信使相關的處理程序保存到銷燬活動的參考。這導致不刷新新活動的界面。我試圖把Messenger放在onSaveInstanceState()中。事件我可以保存信使,處理程序仍然參考我過去的活動,我無法找到一種方法來從信使中檢索我的處理程序來設置新的活動。

編輯:
進出口避免使用:
機器人:configChanges = 「方向| keyboardHidden」
onRetainNonConfigurationInstance()

編輯:
我以前用單的hALR的想法,並保持處理器有。它的工作非常好,儘管我可以看到這種模式意味着仔細清理單例中的引用。
最後也即時測試上,是由阮的還評論

+0

您的服務是一項意向服務嗎? – 2013-05-12 16:43:10

+0

@Hoan Nguyen:是的。我一直在測試不同的方式來溝通IntentService和活動。我嘗試過活動服務廣播模式,但我擔心信號到達時,我unregisterReceiver()。現在我正在試驗使用Singleton的HalR想法的activity-service-messenger-singleton,它完全改變了我的範例。我認爲它對使用單例非常有幫助,實際上我正在考慮一個活動 - 服務 - 廣播 - 單例模式的想法,所以我可以解決我首先關心的unregisterReceiver()問題。 – user1546652 2013-05-12 17:11:19

+1

爲什麼不使用常規服務而不是意向服務? – 2013-05-12 17:15:38

回答

1

我不知道,它適用於這種情況,但也有許多人誰一直受挫失去他們的活動時,使用活動的服務理念它會旋轉,或者每次他們開始新的活動時不得不設置複雜的東西。

有些人會創建它們用於引用的單例,然後將Handler放在那裏。

其他人會extend the application class放東西在裏面。如果你有很多複雜的事情你想要設置一次,那些是你可以使用的技術。

保持你的應用流體和您讓您的活動獨立的另一種是更好的整體理念,所以最好避免任何全球性的,但有時你必須做你必須做什麼。

+1

老兄,你的答案就像一個魅力。我做了一個Singleton,並在裏面引用了我的Handler,我可以用它來設置前臺的活動。特別是我認爲這種模式Activity-Service-Messenger-Singleton更適合於Activity-Service-BroadcastReceiver進行Service和Activity通信。如果沒有更多的答案被拋出生病,請保持你的正確。再次感謝! – user1546652 2013-05-12 16:43:45

0

旋轉設備至少會暫停並根據生命週期恢復您的活動。我想你知道後果。 也許停止並開始一項新服務是唯一正確的解決方案。我和全球各州一樣工作得很好,但當你將每個活動都像「單一應用程序」一樣獨立時,它總是會更容易。

編輯:好吧它是一個信使服務...所以停止和開始不是一個解決方案。所以也許你可以註冊並取消註冊你的信使。