【Android學習】Service&Boradcast初步

Service初步

掌握Service概念
掌握Service分類
Service開發能力具有
瞭解Service和intentService類的區別android

重點難點
StartService和BoundService區別
Service的開發,啓動和綁定
掌握Service和線程的使用區別數據庫

考覈目標
什麼是Service?
請描述一下Service的生命週期?
說一下Android裏有哪兩種Service?
Service會新開進程或者線程麼?
startedService和BoundService區別編程

練習
使用Service來寫一個音樂播放器,要求分別使用startService和bindService方法服務器

什麼是服務

服務是一個應用程序組件,可以在後臺執行一個長時間運行的程序,不提供用戶交互接口,即有些用時比較長的操做咱們但願他在後臺運行,不耽誤咱們當前的操做,這
就引入了Service概念。網絡

常見的好比:訪問網絡,文件IO操做,大數據的數據庫任務,播放音樂等。多線程

Service在後臺運行,不與用戶進行交互。在默認狀況下,Service運行在應用程序進程的主線程中,若是須要在Service中處理一些網絡鏈接等耗時的操做,那麼應該將這些任務放在單獨的線程中處理,避免阻塞用戶界面。異步

Q:學習

  1. 啓動服務後,按Home鍵,服務是否還在運行?是
  2. 啓動服務後,退出進程,是否服務還會運行?否
  3. 啓動服務後,不用多線程,界面是否會阻塞?會
  4. 服務是個新的進程,服務是個新的線程麼?
    服務不是一個新的進程,也不是一個新的線程,它與當前進程綁定

Service的分類

按照啓動方式分類

  • Started Service
    經過startService()啓動
    一旦啓動,就運行在後臺,即使啓動它的對象(Activity)都銷燬了
    一般只啓動,不返回值
    一般網絡上傳或下載,操做完成後,自動中止
    onStartCommand()大數據

  • BoundService
    bindService()來綁定
    提供客戶端服務器接口來啓動
    發生請求,獲得返回值,甚至經過IPC通信
    一個服務能夠被多個調用者綁定,只要有一個綁定這,服務運行,全部綁定者都退出,服務退出
    onBind()線程

按服務性質分

  • Local Service
  • Remote Service (不一樣的進程之間)

按實現方法分類

  • Java Service
  • Native Service

Service的生命週期

  • onCreate()
  • onDestory()
  • onStartCommand()
  • onBind()

建立及使用Service步驟

Started Service

Service

  • 繼承Service類實現本身的服務
  • 在AndroidManifest中註冊服務
  • 啓動服務startService()
  • onStartCommand
    • (返回值)
    • START_STICKY
    • START_NOT_STICKY
    • START_REDELIVER_INTENT
    • (參數值flag)
    • START_FLAG_REDELIVERY
    • START_FLAG_RETRY
  • 中止服務stopService(),stopSelf()

IntentService 異步請求的Service
異步處理服務,新開了一個線程:HandlerThread,在線程中發消息,而後接收,處理完成後,會清除線程,而且關掉服務。在作一次性操做時,用IntentService
下載文件

BoundService

三種實現方法 Local BoundService、(Remote) Messager、AIDL,這裏只介紹第一種。

Local BoundService

  • 繼承Service或者IntentService類實現本身的服務,定義IBinder接口
  • 在AndroidManifest中註冊服務
  • 經過綁定服務bindService(),啓動服務
  • 取消綁定服務unbindService()

bindService不會阻塞線程,說明它是異步操做

Q:

unbind以後是否必定會destory?

boundService 綁定(onBind)和鏈接 onServiceConnection哪一個先執行?
onBind先執行,onServiceConnection後執行。

類似性的onUnBind和onServiceDisconneced呢?
onServiceDisconnected先執行,onUnBind後執行。

何時用startedService何時用BoundService?

什麼是Binder?Linux的Binder和Android的Binder之間的區別?
Binder就是Linux下的進程間IPC通信的一套機制,android基於它進行了封裝和改進,所以成爲默認的IPC機制。

startedService&BoundService區別

本質區別:
boundService 實際上是有一個客戶端、服務端的概念。藉助Binder來通信。

  • startedService和啓動它的Activity不一樣生共死,Activity消亡,不影響Service,可是若是當前進程關閉,則Service消亡
  • BoundService和啓動它的Activity同生共死
  • 不管是start or bind,只要service沒有實例化,就都會被create,但start每次都會調用onStartCommand,而bind則若是已經綁定,就再也不調用onBind了

能夠經過Notification來Running Service in the foreground,等學會Notification了,再說。

Nactive Service(C++實現,NDK)

  • 什麼是Native Service
  • 何時用到Naticei Service
  • 如何調用

Service運行如何與用戶交互

  • Toast Notification
  • StatusBar Notification

如何在Service和線程之間選擇?

Service是一個很方便的組件讓你運行後臺操做,而且不影響當前操做
當你須要在你當前操做的時候另外其一個更獨立操做時候能夠考慮線程,好比當前程序不關閉的狀況下運行音樂,從邏輯上你認爲須要一個後臺操做,但跟咱們如今主線程操做通信頻繁,邏輯關係緊密,那就用多線程(直接用),可以從邏輯上區分開來,就用後臺服務。(跟當前頁面無關,並長期運行的,則用服務,不然則用多線程)

Broadcast Recevier

學習目標

瞭解Android的消息機制
掌握Broadcast發送消息的兩種類型
掌握BroadcastReceiver接收消息的編程

重點難點

sendOrderedBroadcast()的理解

考覈目標

說說Android中發生建立兩種廣播分別是?以及他們的區別?

Broadcast Receiver做用以及爲什麼要引用:
在系統內通知和斷定執行狀態

  1. 系統執行狀態,開機了,IF卡拔了,準備關機了, 電量低了
  2. 自定義執行狀態,發消息提示更新界面

用來接收系統及自定義消息
Broadcast Reveiver接收哪些消息

  • 常規消息(Normal broadcast),經過Context.sendBroadcast發送
  • 排序消息(Ordered broadcast),經過Context.sendOrderedBroadcast發送

如何使用:

  • 繼承BroadcastReceiver

注意:Message、Message Queue、Message Manger

相關文章
相關標籤/搜索