2009-12-21 66 views
0

我是一名新的android開發者,我目前正在申請與SIP溝通。我想設置一個後臺任務來完成所有與SIP有關的任務,並且如果可能的話,在電話啓動時讓它開始。我目前的想法是創建一個Service,並讓它啓動設備啓動,問題是有兩種Services一個使用AIDL和一個以Intent開始。android服務說明

我想將一些參數傳遞給我的服務,讓它獨立於我的主要Activity運行,並能夠通知我的主要Activity傳入消息。任何人都可以告訴我如何做到這一點,並指出我有什麼好的教程,我可以理解兩個Service之間的區別?我已經閱讀了一本關於Android開發者的教程和一些教程,但他們更讓我困惑。

回答

6

的問題是,有一個使用AIDL服務之一的兩種 和一個 時啓動蒙山意圖

這是不正確。您使用Intents與本地服務和遠程服務。您只能使用AIDL和遠程服務。

我想一些參數傳遞給 我的服務,並讓它運行indepedently我的主要活動 並能夠 通知我的傳入 消息的主要活動。

要通過「參數」的服務,您可以通過上包putExtra()作爲這些「額外」的Intent傳遞給startService()bindService()

中的「通知我的主要活動傳入消息」,你可以使用廣播Intents,並在活動BroadcastReceiver,或者你可以通過bindService()活動的服務綁定和使用偵聽器對象。

+0

再次感謝了一個令人困惑的問題,因爲看起來每個人都給出了不同的答案,即使服務是本地服務或遠程服務,服務也獨立於活動運行?換句話說,服務總是獨立於活動,並作爲執行耗時任務的後臺線程運行?糾正我,如果我錯了,但不是遠程(AIDL)服務代碼同步執行? – maxsap 2009-12-21 18:26:43

+0

「即使服務是本地服務還是遠程服務,服務是否獨立於活動運行?」是的,這只是一個問題,它是否在同一個過程中。 「並作爲執行耗時任務的後臺線程運行?「只有當你設置了一個後臺線程,否則它就像你所有的活動和其他Android組件一樣在主應用程序線程上運行。」如果我錯了,請糾正我,但不是遠程(AIDL)服務代碼同步執行?是的 – CommonsWare 2009-12-21 19:54:32

+0

嗨Commonsware,我想知道你的「如果你設置了一個後臺線程」部分......如果你使用AIDL你會得到一個存根,所以我想知道你如何將這個存根(它提供了功能)放在一個Thread? – TiGer 2010-06-02 09:47:01

2

使用服務。您可以使用AIDL中定義的過程與它進行通信。如果它必須通知您應用程序,它可以發送您的應用程序的意圖。

如果您希望它在啓動時具有某些參數,我會使用首選項管理器來存儲它們。

我爲我的RandyVideos應用程序寫了類似的東西(可免費從MiKandi獲得)。

我在後臺做網絡的東西有一個服務。主Activity通過AIDL中描述的方法與它進行通信。如果該服務想要與該活動交談,它就發送一個意圖。

+0

非常感謝您的幫助。關於maxsap – maxsap 2009-12-21 18:27:21