聊聊Android四大組件之一的Service

來源:互聯網
上載者:User

聊聊Android四大組件之一的Service

Service作為Android中四大組件之一,擁有重要的地位。Service具有和Activity一樣的層級,只是沒有介面,是運行於背景服務。這個運行“後台”是指不可見,不是指在後台線程中,事實上四大組件都是運行在UI線程中,都不能在各自的生命週期方法中執行耗時操作或者網路請求。 Service的應用情境還是比較多的,比如說在背景播放音樂、即時去更新當前地理位置的變化、新聞APP後台去離線緩衝內容、處理序間通訊等。

Service主要可以分為兩類:Local Service、Remote Service。比較常用的還是本地服務,應用於程式內部。可以通過Context.startService()啟動Service,通過 Context.stopService()結束服務。同時也可以Context.bindService()來綁定一個service服務自己,也可以 通過Context.unbindService()解除綁定。無論調用多少次startService,只需一句stopService就終結服務了。

Remote Service 用於android系統內部的應用程式之間。可以定義介面並把介面暴露出來,以便其他應用進行操作。用戶端建立到服務物件的串連,並通過那個串連來調用服 務。調用Context.bindService()方法建立串連,並啟動,以調用 Context.unbindService()關閉串連。多個用戶端可以綁定至同一個服務。如果服務此時還沒有載入,bindService()會先加 載它。

啟動Service的方式有兩種,那對應著的是Service的兩種生命週期。看下Google官方的配圖,簡單直白明了,我就不再贅述了。

由於start和stop的方式來控制服務的方式比較簡單,在此也就不多贅述了。只是還需提醒在這種方式下,Activity與Service的通訊就顯 得不那麼直白簡單了,因為我們拿不到Service的引用。如果你通過單例的形式去拿到Service的引用,進而擷取其中的方法和屬性也未嘗不可,但是 入侵性比較嚴重,在此不推薦大家使用這種辦法。比較好的實現Activity和Service之間通訊的是另一個重要的組件 BroadCastReceiver,下面的執行個體中會用到。

實戰使用的是一個簡單的音樂播放器。當然了,使用的是bind和unbind的方式。bind即綁定服務,unbind即解除綁定服務,也進而調用了 Service的onDestroy方法銷毀。bind可以直接拿到Service的引用,能直接操控service。bind可以用在當前應用中的業務 處理,也可以通過AIDL實現處理序間通訊。本文先介紹第一種。簡單介紹下這個Demo實現的功能,它會播放手機SD卡上的一首歌曲,你可以對其開始和暫停 操作,介面會展示歌曲的時間長度以及歌曲播放的即時位置。兩者的互動的實現方式:1、類引用的直接調用   2、廣播機制,Service發,Activity接收。

一、在MusicService中建立內部類MyBinder,其中有個公有方法返回Service的執行個體

二、通過MusicService中的onBind方法返回MyBinder的執行個體,供Activity綁定成功後的回調

三、和Activity一樣,需要在manifest中註冊

四、Activity中綁定,獲得回調的Binder,進而得到MusicService執行個體

五、拿到了MusicService的引用了,終於可以操作service去播放暫停音樂了

六、在Activity的onDestroy方法中,記得對Service進行解除綁定。不然會和註冊的BroadCastReceiver一樣,會造成記憶體流失

好了,今天的乾貨分享就到這裡了,明天為大家獻上基於AIDL和Service的處理序間通訊的實現。

代碼地址:https://github.com/JackCho/ServiceDemo1

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.