Android 開發四大組件之 Service

1.簡介

  • 定義 Service,是 Android 四大組件之一, 屬於 計算型組件
  • 做用 提供需在後臺長期運行的服務。如:複雜計算、音樂播放、下載等。
  • 特色 無用戶界面、在後臺運行、生命週期長。

2. 生命週期

生命週期

  1. 經過 start 方式開啓服務 onCreate() -- > onStartCommand() -- > onDestory() 注意:若是服務已經開啓,不會重複回調 onCreate() 方法,若是再次調用context.startService() 方法,service 而是會調用 onStart() 或者onStartCommand() 方法。中止服務須要調用 context.stopService() 方法,服務中止的時候回調 onDestory 被銷燬。 特色:一旦服務開啓就跟調用者(開啓者)沒有任何關係了。開啓者退出了,服務還在後臺長期的運行,開啓者不能調用服務裏面的方法。多線程

  2. 採用 bind 的方式開啓服務 onCreate() -- > onBind() --> onUnbind() -- > onDestory() 注意:綁定服務不會調用 onStart() 或者onStartCommand()方法 特色:bind 的方式開啓服務,綁定服務,調用者掛了,服務也會跟着掛掉。綁定者能夠調用服務裏面的方法。學習

3. 類型

本地服務線程

調用者和 service 在同一個進程裏,因此運行在主進程的 main 線程中。因此不能進行耗時操做,能夠採用在 service 裏面建立一個 Thread 來執行任務。service 影響的是進程的生命週期,討論與 Thread 的區別沒有意義。 任何 Activity 均可以控制同一 Service,而系統也只會建立一個對應 Service 的實例。 學習地址cdn

遠程服務blog

調用者和 service 不在同一個進程中,service 在單獨的進程中的 main 線程,是一種跨進程通訊方式。學習地址生命週期

4. IntentService

IntentService 是 Service 的子類,比普通的 Service 增長了額外的功能。先看Service自己存在兩個問題:隊列

  • Service 不會專門啓動一條單獨的進程,Service 與它所在應用位於同一個進程中;
  • Service也不是專門一條新線程,所以不該該在Service中直接處理耗時的任務;

特徵 :進程

  • 會建立獨立的 worker 線程來處理全部的Intent請求;
  • 會建立獨立的 worker 線程來處理 onHandleIntent() 方法實現的代碼,無需處理多線程問題;
  • 全部請求處理完成後,IntentService會自動中止,無需調用stopSelf()方法中止Service;
  • 爲 Service 的 onBind() 提供默認實現,返回null;
  • 爲Service 的 onStartCommand 提供默認實現,將請求 Intent 添加到隊列中; 學習地址
相關文章
相關標籤/搜索