2010-11-02 52 views
1

我正在製作一個應用程序,該應用程序具有與單個服務進行通信並用於啓動,停止或更改該服務設置的活動。我使用了來自this提示的單例方法。如何等待活動開始時的服務

我的問題是忙等待不適合我,我無法將監聽器附加到服務,因爲活動被阻止。我希望服務在應用程序啓動時啓動或獲取它的當前實例,所以我將忙等待放在onCreate中。我猜我正在做這個錯誤,所以我該如何做到這一點?

此外,如果有更好的方法來此,請售後的任何環節或導遊,因爲我是getn困惑在Android開發者網站:P

的感謝!

回答

2

我從這個技巧中使用了單例方法。

不要那樣做。改爲使用bindService()和本地綁定模式,並在服務準備就緒時通知您。您還可以訪問服務發佈的API,並在綁定後開始使用它。

+0

bindService聽起來不錯,但據我所知,只有在Activity關閉之後,服務纔會保持活躍狀態​​。我需要服務保持活躍狀態​​,並在下次活動開始時重新連接。 – danizmax 2010-11-02 13:20:54

+0

@danizmax:如果需要,您可以同時使用'startService()'和'bindService()'。確保你有一個很好的理由讓活動結束後繼續提供服務,但是 - 如果用戶沒有預料到這種行爲,就會導致市場上的一星評級。您也可以嘗試使用更多的命令模式來操作您的服務,從服務操作中解耦您的活動。 – CommonsWare 2010-11-02 16:55:49

+0

該服務是主要功能,它將從互聯網獲取數據並每隔幾分鐘處理一次,取決於設置。 – danizmax 2010-11-02 20:02:26

1

問題是程序與事件驅動編程之一,android的UI建立在後者之上。

onCreate是一個事件。服務連接的通知也是一個事件。直到您從onCreate返回後,您纔會收到服務連接通知(即使發生這種情況)。

您可以將您的活動啓動分爲兩部分,第一部分是在onCreate中完成的,第二部分是爲了響應服務連接?

+0

這實際上是我的計劃A,但是當我沒有實例時,如何從服務中獲取通知?通過BroadcastReceiver?我有一種感覺,它並不意味着被用於這個目的。 – danizmax 2010-11-02 13:17:02

+0

從您的服務連接的onServiceConnected()方法中獲取實例句柄,您稍後將使用它來調用該服務的RPC。 – 2010-11-02 13:32:51