兩種創建服務例子
Service生命週期
- Start方式
服務需要註冊,像靜態廣播接收器,在後臺運行,但需要自啓
服務實例只會有一個,所以startService()->onCreat()只會調用一次,再點擊只調用onStartCommand(),stopService()->onDestroy()
- Bind方式
bind啓動方式
bindService(*Intent*,*ServiceConnection對象或Null*,)
unbindService(*ServiceConnection對象或Null*)只能一次,多按會報解綁定異常錯誤,綁定的服務必須解綁定,因爲和啓動源聯繫了
Service內部方法
ServiceConnection類
bindService()方法:服務與活動聯繫更加緊密,可以調用服務中方法
任何一個服務在整個應用程序範圍內都是通用的,可以和任何一個其他活動綁定,綁定後還可獲得相同的Binder實例
IntentService類:IntentService是繼承於Service並處理異步請求的一個類,在IntentService內有一個工作線程來處理耗時操作,啓動IntentService的方式和啓動傳統Service一樣,同時,當任務執行完後,IntentService會自動停止,而不需要我們去手動控制。另外,可以啓動IntentService多次,而每一個耗時操作會以工作隊列的方式在IntentService的onHandleIntent回調方法中執行,並且,每次只會執行一個工作線程,執行完第一個再執行第二個,以此類推
所有請求都在一個單線程中,不會阻塞應用程序的主線程(UI Thread),同一時間只處理一個請求。那麼,用IntentService有什麼好處呢?首先,我們省去了在Service中手動開線程的麻煩,第二,當操作完成時,我們不用手動停止Service