四大組件---Service

                                       Service

學習路線ide

1. 基礎知識

  • 定義:服務,屬於Android中的計算型組件
  • 做用:提供須要在後臺長期運行的服務(如複雜計算、下載等等)
  • 特色:長生命週期的、沒有用戶界面、在後臺運行

2. 生命週期方法詳解

https://my.oschina.net/quguangle/blog/791697學習

3. Service分類

3.1 Service的類型spa

3.2 詳細介紹.net

4. Service的使用解析

(本地服務)http://www.jianshu.com/p/e04c4239b07e線程

(遠程服務)http://www.jianshu.com/p/34326751b2c6code

5. 使用場景

  • 經過上述描述,你應該對Service類型及其使用很是瞭解;
  • 那麼,咱們該何時用哪一種類型的Service呢?
  • 各類Service的使用場景請看下圖:

6. 其餘思考

6.1 Service和Thread的區別

  • 結論:Service和Thread之間沒有任何關係
  • 之因此有很多人會把它們聯繫起來,主要由於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();  
    }  

}

6.2 Service和IntentService的區別

7.對onStartCommand參數的講解

@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。

相關文章
相關標籤/搜索