2013-04-11 58 views
0

我正在實施一項服務,該服務將在MainActivity啓動時啓動。該服務檢查並維護網絡連接。關於服務,活動和通知之間的交互的建議

,因爲我希望該服務繼續運行,即使該活動是不可用我還沒有綁定服務的活動。該服務將從它所連接的服務器接收消息。

我奮力選擇最佳的邏輯做當服務收到以下消息。

檢查MainActivity當前已打開,並在用戶

前面如果是調用活動的一些方法。如果沒有活動的更新通知是與UI

互動。

我的問題是;

如何正確檢查活動是否從我的服務在UI中運行?我知道我可以綁定服務,但如果活動已關閉,我不想解除綁定。這會是一個問題嗎?

我會以某種方式將消息從服​​務發送到活動。鑑於上述情況,最好的辦法是什麼?

回答

2

以不同的方式做。

  • 如果你的服務沒有在一個單獨的進程從活動上運行,那麼你的服務可以通過subcalssed Application對象,你的活動可以看看它提供消息的同步(多線程安全的)列表。但是,如果輪詢發生在某些其他事件上,這將是最好的。

  • 如果要排序「推」的消息,你的活動,你的活動應該與您的服務若發現它運行,而不是倒過來登記。在這種情況下,您的活動應該實現一個接口,通過該接口,服務可以以線程安全的方式通知活動新消息。

當然,你也可以去直接和簡單地發佈其打開活動的通知,但我的理解是,要提供更平滑整合。

+0

班,這似乎是一個很好的方法,尤其是你的第二點。但是,似乎我仍然需要引用服務中的活動(以便調用接口方法)。你能否給我一個線索,我將如何獲得一個,以及如何檢查活動是否開放? – Stephen 2013-04-11 12:19:06

+1

@Stephen你的服務和你的Activity都可以通過'Activity.getApplication()'和'Service.getApplication()來訪問你的子類。你輸入結果。然後,你的服務嚮應用程序對象「註冊」(/存儲一個對它自己的引用,然後Application對象提供方法來告訴服務他們在那裏或者去了,我會在'onResume()'中調用這些方法, onPause()'出於安全原因(又名NullPointer避免),然後,您的服務可以訪問您的應用程序的活動活動,同時保證您的活動處於最佳狀態。 – 2013-04-11 12:38:03

0

一個想法是讓你的服務發送狀態欄通知當一個新的更新。
執行通知,以便單擊時打開MainActivity

然後,當用戶點擊通知時,如果MainActivity已經在運行,那麼它將被帶到前面,否則它將被啓動。
因此,這基本上消除了需要檢查MainActivity目前是否在用戶面前打開(我認爲這是一種不好的做法)。

+0

嘿安迪,謝謝你的迴應。這是一個明智的方法,但它不適合應用程序的工作方式。 – Stephen 2013-04-11 12:18:08