學習路線ide
https://my.oschina.net/quguangle/blog/791697學習
3.1 Service的類型spa
3.2 詳細介紹.net
(本地服務)http://www.jianshu.com/p/e04c4239b07e線程
(遠程服務)http://www.jianshu.com/p/34326751b2c6code
之因此有很多人會把它們聯繫起來,主要由於Service的後臺概念blog
後臺的定義:後臺任務運行徹底不依賴UI,即便Activity被銷燬,或者程序被關閉,只要進程還在,後臺任務就能夠繼續運行生命週期
其實兩者存在較大的區別,以下圖:進程
通常來講,會將Service和Thread聯合着用,即在Service中再建立一個子線程(工做線程)去處理耗時操做邏輯,以下代碼:內存
@Override public int onStartCommand(Intent intent, int flags, int startId) { //新建工做線程 new Thread(new Runnable() { @Override public void run() { // 開始執行後臺任務 } }).start(); return super.onStartCommand(intent, flags, startId); } class MyBinder extends Binder { public void service_connect_Activity() { //新建工做線程 new Thread(new Runnable() { @Override public void run() { // 執行具體的下載任務 } }).start(); } }
@Override public int onStartCommand(Intent intent, int flags, int startId) { return int; }
參數flags默認狀況下是0,對應的常量名爲START_STICKY_COMPATIBILITY。當Service由於內存 不足而被系統kill後,接下來將來的某個時間內,當系統內存足夠可用的狀況下,系統將會嘗 試從新建立此Service,但不保證服務被Kill後必定能重啓。
參數startId是一個惟一的整型,用於表示Activity(客戶端)執行startService(...)的請求請 求標識,在屢次startService(...)的狀況下,呈現0,1,2....遞增。
返回值具體的可選值及含義以下:
START_NOT_STICKY(非粘性):當Service由於內存不足而被系統kill後,接下來將來的某個時間 內,即便系統內存足夠可用,系統也不會嘗試從新建立此Service。除非程序中Activity(客戶 端)明確再次調用startService(...)啓動此Service。
START_STICKY:當Service由於內存不足而被系統kill後,接下來將來的某個時間內,當系統內 存足夠可用的狀況下,系統將會嘗試從新建立此Service,一旦建立成功後將回調 onStartCommand(...)方法,但其中的Inten是null,pendingintent除外。
START_REDELIVER_INTENT:與START_STICKY惟一不一樣的是,回調onStartCommand(...)方法時, 其中的Intent將是非空,將是最後一次調用startService(...)中的intent。