2016-07-10 282 views
0

我有一個Tile,當它處於活動狀態時,它運行一個計時器,爲這五分鐘執行一個任務,然後在一段時間後返回到非活動狀態。保持TileService處於活動狀態?

但是我遇到的問題是服務被殺。當所述計時器開始時,我已經打電話startForeground(id),但我的服務仍然被殺死。我也從onStartCommand(intent, flags, startID)返回START_STICKY

無論如何絕對防止它被殺害,或者我只是在這裏運氣不好?

+1

我強烈懷疑'TileService'沒有啓動,而是綁定到了。如果是這樣,由於不調用'startService()',當客戶端解除綁定時服務將被銷燬。我建議你將業務邏輯轉移到一個單獨的普通「服務」上,以便更好地控制其生命週期。 – CommonsWare

+0

@CommonsWare啊,我認爲你在這裏的東西。我會盡力而爲,並且就此回覆你! – russjr08

+0

@CommonsWare只是想回到你身邊,讓你知道它的工作:) – russjr08

回答

0

我設法通過使用@ CommonWare的建議來解決這個問題。我將所有的邏輯抽象爲一個普通的Service類,並從我的Tile的服務類中調用startService()

我碰到的一個道路顛簸是搞清楚如何獲得瓷磚實例到新的服務(處理更新瓷磚的文本和狀態),但解決了這個問題,通過使用Application類來保存對瓷磚的引用。 (TileService每次onClick更新此參考,然後致電startService()

這可能不是最乾淨和最好的方法,但它是我現在選擇滾動的方式。

+1

['瓷磚''Parcelable'](https://developer.android.com/reference/android/service/quicksettings/Tile。 html),並可以通過額外的'Intent'傳遞給其他服務。 – CommonsWare

+0

好點!不知道我是如何錯過的。 – russjr08

+0

傳遞給Intent似乎存在一個問題。我已經在錯誤跟蹤器(https://code.google.com/p/android/issues/detail?id=216639)上打開了一個問題,以防萬一我不只是做錯了:) – russjr08

相關問題