2017-10-16 28 views
2

我需要爲我的應用啓動一個foreground service,以便它繼續運行,即使應用在後臺也不會被殺死。這是一種方法,startForeground。我還需要與服務進行通信,所以我收集最簡單的選項將綁定到它(我計劃它在相同的過程中運行,以便能夠將返回的IBinder投給我的類,只需調用它的方法)。然而,我無處可以找到有關綁定foreground services的信息。綁定的服務總是前臺?

通讀文檔和教程我發現信息bindService的其中一個標誌是https://developer.android.com/reference/android/content/Context.html#BIND_NOT_FOREGROUND,以防止服務獲得前臺優先級。

這是否意味着默認情況下每個bound service也是一個​​之一,它需要通知等(文檔從未真正提到過,所以我猜不是)?

如果我的應用程序使用前臺服務,應用程序可以在後臺被殺死嗎?

回答

2

好吧,讓我們來談談服務。服務可以是開始,約束他們二人。所以,你實際上可以使startService()startForeground()後,但是當你要bindService(),您可以刪除通知,並對服務不前景(好像標誌BIND_NOT_FOREGROUND針對這種情況)。綁定服務本身並不是前景(它們具有綁定到服務的組件的優先級)。因爲我知道要做前臺綁定服務,所以不能僅僅調用startForeground()(它不會工作,不會在狀態欄中添加任何通知),所以唯一的方法是使startService()和in onStartCommand()只會執行處理操作startForeground()

因此默認綁定服務不是前臺,你不需要通知。系統或用戶在任何時候都可以通過應用程序的設置(強制停止)殺死您的應用程序,但是如果您想讓系統知道您的服務對用戶和應用程序非常重要,則可以將其設置爲前臺,以免系統無法觸及直到系統有足夠的內存用於你的進程。