2010-07-02 57 views
1

我對綁定到服務的工作方式有點困惑。我明白使用Context.startService()啓動服務,並且bindService不會調用onStartCommand。但我的理解是,如果我使用startService,我必須明確停止該服務。但是,如果沒有更多的活動被綁定,我希望服務能夠消亡。綁定到Android中的服務

我的問題是調用bindService從不調用onServiceConnected(),所以我的Service binder對象爲null。該服務是否必須明確啓動以綁定到它?如果是這樣,它是如何知道在沒有任何約束條件時終止,以及如何知道它是否已經啓動,這樣我就可以知道使用約束對象了?

回答

1

答案是,我沒有等待服務使用它之前實際的約束,因爲它被異步勢必

3

解釋,如果你調用bindService與系統BIND_AUTO_CREATE爲標誌,如果它存在的活動將綁定到服務,否則,如果它不存在,系統將啓動該服務你然後會將你的活動綁定到服務上。此外,如果您以這種方式啓動服務,則只有服務仍有一些綁定的上下文時,該服務纔會保持活動狀態。

這是bindService():

連接到應用程序服務,如果需要創建它。這定義了應用程序和服務之間的依賴關係。給定的conn會在創建服務對象時收到服務對象,並被告知它是否死亡並重新啓動。只要存在調用上下文,該服務就會被系統認爲是必需的。例如,如果這個上下文是停止的活動,將不需要的服務繼續運行,直到活動恢復

,這是ServiceLyfecycle

服務既可以是開始並有連接到它的連接。在這種情況下,只要系統啓動,或者存在與Context.BIND_AUTO_CREATE標誌的一個或多個連接,系統就會繼續運行該服務。一旦這些情況都不成立,就會調用服務的onDestroy()方法,並且服務被有效終止。從onDestroy()返回後,所有清理(停止線程,取消註冊接收者)應該完成。

+0

這就是我想它的工作,但即使我在BIND_AUTO_CREATE通過我在我的活頁夾對象上得到空指針異常。事實證明,直到onCreate()退出後,服務纔會被綁定。或者至少這是我讀的。 – Falmarri 2010-07-05 21:59:54

+0

您是否在清單文件中註冊了您的服務?您可以發佈您的代碼嗎? – hara 2010-07-06 08:17:20

+0

是的服務工作,我實際上發佈的是解決方案(99%肯定)。該服務實際上並沒有受到限制,直到退出創建。 – Falmarri 2010-07-07 01:49:35