3 回答

TA貢獻1810條經驗 獲得超5個贊
正如Dave已經指出的那樣,你可以運行Service
前景優(yōu)先級。但是這種做法只應在絕對必要時使用,即如果服務被Android殺死會導致糟糕的用戶體驗。這就是“前景”的真正含義:你的應用程序在某種程度上處于前臺,如果它被殺死,用戶會立即注意到它(例如因為它播放了一首歌或一段視頻)。
在大多數(shù)情況下,請求服務的前臺優(yōu)先級是反效果的!
這是為什么?當Android決定殺死a時Service
,它會這樣做,因為它缺少資源(通常是RAM)?;诓煌膬?yōu)先級類,Android決定終止哪些正在運行的進程以及這些服務,以便釋放資源。這是一個您希望發(fā)生的健康過程,以便用戶獲得流暢的體驗。如果您沒有充分理由請求前臺優(yōu)先級,只是為了防止您的服務被殺,它很可能會導致糟糕的用戶體驗?;蛘?,您能保證您的服務保持在最小的資源消耗范圍內并且沒有內存泄漏嗎?1
Android提供了粘性服務來標記服務,如果它們被殺死,應該在一段寬限期后重新啟動。這種重啟通常在幾秒鐘內完成。
想要為Android編寫XMPP客戶端的圖像。您是否應該為Service
包含XMPP連接的前臺優(yōu)先級請求?絕對沒有,絕對沒有理由這樣做。但是您希望將其START_STICKY
用作服務onStartCommand
方法的返回標志。因此,當資源壓力時,您的服務會停止,并在情況恢復正常后重新啟動。
1:我很確定很多Android應用都有內存泄漏。這是休閑(桌面)程序員不關心的東西。

TA貢獻2021條經驗 獲得超8個贊
對于Android 2.0或更高版本,您可以使用該startForeground()
方法在前臺啟動服務。
該文件說以下:
啟動的服務可以使用
startForeground(int, Notification)
API將服務置于前臺狀態(tài),其中系統(tǒng)認為它是用戶主動意識到的東西,因此在內存不足時不是候選者。(從理論上講,服務在當前前臺應用程序的極端內存壓力下被殺死仍然是可能的,但實際上這不應該是一個問題。)
主要用于當殺死服務對用戶造成破壞時,例如,殺死音樂播放器服務將停止音樂播放。
您需要提供一個Notification
方法,該方法顯示在Ongoing部分的Notifications Bar中。

TA貢獻1834條經驗 獲得超8個贊
當您使用BIND_AUTO_CREATE將服務綁定到Activity時,您的服務將在您的活動被銷毀和解除綁定后被殺死。它不依賴于你如何實現(xiàn)你的服務unBind方法它仍將被殺死。
另一種方法是使用Activity中的startService方法啟動服務。這樣即使您的Activity被銷毀,您的服務也不會被銷毀甚至暫停,但您必須在適當時使用stopSelf / stopService自行暫停/銷毀它。
- 3 回答
- 0 關注
- 2257 瀏覽
添加回答
舉報