第9講 ?后臺服務
Service
Service是Android系統的后臺服務組件,適用于開發(fā)無界面、長時間運行的應用功能
特點
沒有用戶界面
比Activity 的優(yōu)先級高,不會輕易被Android系統終止
即使Service被系統終止颜启,在系統資源恢復后Service也將自動恢復運行狀態(tài)
用于進程間通信(Inter Process Communication,IPC),解決兩個不同Android應用程序進程之間的調用和通訊問題
服務管理
服務管理主要指服務的啟動和停止
首先介紹實現Service的最小代碼集
第1行到第3行引入必要包
第5行聲明了RandomService繼承android.app.Service類
在第7行到第9行重載了onBind()函數
onBind()函數是在Service被綁定后調用的函數壳猜,能夠返回Service的對象,在后面的內容中會詳細介紹
Service的最小代碼集并不能完成任何實際的功能滑凉,需要重載onCreate()统扳、onStart()和onDestroy(),才使Service具有實際意義
Android系統在創(chuàng)建Service時畅姊,會自動調用onCreate() 完成必要的初始化工作
在Service沒有必要再存在時咒钟,系統會自動調用onDestroy(),釋放所有占用的資源
通過Context.startService(Intent)啟動Service時若未,onStart()則會被系統調用朱嘴,Intent會傳遞給Service一些重要的參數
Service會根據實際情況選擇需要重載上面的三個函數
服務管理
注冊Service
在AndroidManifest.xml文件中注冊,否則粗合,這個Service根本無法啟動
AndroidManifest.xml文件中注冊Service的代碼如下
使用標簽聲明服務萍嬉,其中的android:name表示的是Service的類名稱,一定要與用戶建立的Service類名稱一致
服務管理
啟動Service
啟動方式
顯示啟動
隱式啟動
顯示啟動:在Intent中指明Service所在的類隙疚,并調用startService(Intent)函數啟動Service壤追,示例代碼如下
在Intent中指明啟動的Service在RandomSerevice.class中
啟動Service
隱式啟動:在注冊Service時,聲明Intent-filter的action屬性
設置Intent的action屬性供屉,可以在不聲明Service所在類的情況下啟動服務
隱式啟動的代碼如下
啟動Service
若Service和調用服務的組件在同一個應用程序中行冰,可以使用顯式啟動或隱式啟動溺蕉,顯式啟動更加易于使用,且代碼簡潔
若服務和調用服務的組件在不同的應用程序中资柔,則只能使用隱式啟動
停止Service
將啟動Service的Intent傳遞給stopService(Intent)函數即可焙贷,示例代碼如下
在調用startService(Intent)函數首次啟動Service后,系統會先后調用onCreate()和onStart()
再次調用startService(Intent)函數贿堰,系統則僅調用onStart()辙芍,而不再調用onCreate()
在調用stopService(Intent)函數停止Service時,系統會調用onDestroy()
無論調用過多少次startService(Intent)羹与,在調用stopService (Intent)函數時故硅,系統僅調用onDestroy()一次