我有一個Tile,當它處於活動狀態時,它運行一個計時器,爲這五分鐘執行一個任務,然後在一段時間後返回到非活動狀態。保持TileService處於活動狀態?
但是我遇到的問題是服務被殺。當所述計時器開始時,我已經打電話startForeground(id)
,但我的服務仍然被殺死。我也從onStartCommand(intent, flags, startID)
返回START_STICKY
。
無論如何絕對防止它被殺害,或者我只是在這裏運氣不好?
我有一個Tile,當它處於活動狀態時,它運行一個計時器,爲這五分鐘執行一個任務,然後在一段時間後返回到非活動狀態。保持TileService處於活動狀態?
但是我遇到的問題是服務被殺。當所述計時器開始時,我已經打電話startForeground(id)
,但我的服務仍然被殺死。我也從onStartCommand(intent, flags, startID)
返回START_STICKY
。
無論如何絕對防止它被殺害,或者我只是在這裏運氣不好?
我設法通過使用@ CommonWare的建議來解決這個問題。我將所有的邏輯抽象爲一個普通的Service
類,並從我的Tile的服務類中調用startService()
。
我碰到的一個道路顛簸是搞清楚如何獲得瓷磚實例到新的服務(處理更新瓷磚的文本和狀態),但解決了這個問題,通過使用Application
類來保存對瓷磚的引用。 (TileService
每次onClick更新此參考,然後致電startService()
)
這可能不是最乾淨和最好的方法,但它是我現在選擇滾動的方式。
['瓷磚''Parcelable'](https://developer.android.com/reference/android/service/quicksettings/Tile。 html),並可以通過額外的'Intent'傳遞給其他服務。 – CommonsWare
好點!不知道我是如何錯過的。 – russjr08
傳遞給Intent似乎存在一個問題。我已經在錯誤跟蹤器(https://code.google.com/p/android/issues/detail?id=216639)上打開了一個問題,以防萬一我不只是做錯了:) – russjr08
我強烈懷疑'TileService'沒有啓動,而是綁定到了。如果是這樣,由於不調用'startService()',當客戶端解除綁定時服務將被銷燬。我建議你將業務邏輯轉移到一個單獨的普通「服務」上,以便更好地控制其生命週期。 – CommonsWare
@CommonsWare啊,我認爲你在這裏的東西。我會盡力而爲,並且就此回覆你! – russjr08
@CommonsWare只是想回到你身邊,讓你知道它的工作:) – russjr08