服務(service)——四大組件之一

服務——四大組件之一:
一,簡介
service和activity一樣都間接繼承自Context
service可以說是一個在後臺運行的Activity,它不是一個單獨的進程,它只需要應用告訴它要在後臺做什麼就可以了。
它要實現和用戶的交互的話需要通過通知欄或則是發送廣播,UI去接收顯示。它的應用十分廣泛,尤其是在框架層,應用更多的是對系統服務的調用。
它用於處理一些不干擾用戶使用的後臺操作。如下載,網絡獲取。播放音樂,他可以通過INTENT來開啓,同時也可以綁定到宿主對象(調用者例如ACTIVITY上)來使用。
服務是一個應用程序組件代表應用程序執行一個長時間操作的行爲,雖然不與用戶交互或供應功能供其它應用程序使用。每個服務類必須有一個相應的包的AndroidManifest.xml中 聲明。服務可以通過Context.startService()和Context.bindService()開始工作。它和其他的應用對象一樣,在他的宿主進程的主線程中運行。
service和activity一樣都間接繼承自Context
二,service的生命週期
1.context.startService() 啓動流程(後臺處理工作):
startService() -> onCreate() -> onStartCommand() -> Service running -> context.stopService() -> onDestroy() -> Service stop
所以調用startService的生命週期大致爲:
onCreate(只在創建的時候調用一次直到被摧毀) --> onStartCommand (服務開啓後,可多次調用) --> onDestroy
2.context.bindService()啓動流程(在本地同一進程內與Activity交互):
bindService() -> onCreate() -> onBind() -> Service running -> onUnbind() -> onDestroy() -> Service stop
bindService的生命週期簡化爲爲:onCreate --> onBind --> onUnbind --> onDestory。
三,服務創建的步驟:
第一步,創建服務類
ublic class MyService extends Service {}
第二步,在清單文件中註冊Service
第三步,啓動服務
(1)直接啓動服務的方式
Intent intent = new Intent(getApplicationContext(), MyService.class);
startService(intent);
(2)通過綁定啓動服務的方式
bindService(Intent service, ServiceConnection conn, int flags)
ServiceConnection可以監聽服務的狀態,在進行服務綁定的時,其標誌位可以爲以下幾種(這裏列出3種):
1).Context.BIND_AUTO_CREATE
說明:表示收到綁定請求的時候,如果服務尚未創建,則即刻創建,在系統內存不足需要先摧毀優先級組件來釋放內存,且只有駐留該服務的進程成爲被摧毀對象時,服務才被摧毀
2).Context.BIND_DEBUG_UNBIND
說明:通常用於調試場景中判斷綁定的服務是否正確,但容易引起內存泄漏,因此非調試目的的時候不建議使用
3).Context.BIND_NOT_FOREGROUND
四,2.Service與UI之間的通信方式
(1)使用直接啓動的startService實現信息傳遞
流程:UI ——>Service
操作:使用Intent進行數據傳遞,通過服務中的onStartCommand方法進行接受(和Activity間傳遞方式一樣)
(2)使用綁定啓動的bindservice實現信息傳遞(
流程:UI ——>Service
(3)使用Broadcast(廣播)進行信息的雙向傳遞
流程:UI <——>Service
操作:註冊綁定廣播接受器,之後通過廣播來進行二者間通信
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章