我正在開發一款安卓應用來播放音樂。用於播放音樂的Android服務:爲什麼START_STICKY?
到目前爲止,我所傳回的負責播放音樂沒有太多的思想監守在Eclipse中的提示服務的onStartCommand
START_STICKY
指出:「這種模式是有道理的,[...]服務執行後臺音樂播放」。
這種方法所做的第一件事就是查看它應該做什麼(播放,停止,下一首歌......)。
最近,當我在播放音樂時將應用程序殺死(通過將它從最近的應用程序概覽中拖出屏幕),應用程序崩潰。查看日誌文件,我發現嘗試訪問onStartCommand
中的意圖時(在調用Apllications和Service的onCreate
方法之後),拋出了NullPointerException。
我的第一個反應是,因此在onStartCommand
方法的開頭插入:
if (intent == null){
stopSelf();
return START_NOT_STICKY;
}
但閱讀的START_STICKY
和START_NOT_STICKY
我再次納悶的描述後:爲什麼會START_STICKY
被推薦用於音樂播放器?
我的理解是,兩者的區別在於,如果一個以START_STICKY
開頭的服務被終止,它將被重新啓動(然後使用intent = null)。使用START_NOT_STICKY
服務將不會重新啓動(除非用戶請求它),因此它將始終以意向調用,我不需要檢查它是否爲空。
當用戶殺死應用程序時,似乎很明顯該服務不應該重新啓動。
另一種情況是,我可以想到服務可能會重新啓動的地方在於服務是否由於缺乏資源而被系統殺死。在這種情況下,我也不認爲用戶會希望音樂意外開始播放音樂,只是因爲有些資源可用。
以下兩個答案暗示的返回碼有沒有其他的意思不是不管,如果進程被殺死了應該重新啓動服務:
- What is START_STICKY,START_NOT_STICKY and START_REDELIVER_INTENT Service
- START_STICKY and START_NOT_STICKY
爲什麼START_STICKY
推薦給音樂播放器?
播放音樂並不需要一個新的service.Already當您使用媒體播放器類即使音樂是應該保持在後臺運行,而其他應用程序都在 – Anonymous
@Anonymous創建服務前景? – jakun
默認情況下,它會在後臺運行..只有當用戶從內存中清除最近的應用程序時,音樂纔會停止。例如,像spotify – Anonymous