自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

聊聊Android四大組件之一的Service

移動(dòng)開發(fā) Android
Service作為Android中四大組件之一,擁有重要的地位。Service具有和Activity一樣的級(jí)別,只是沒有界面,是運(yùn)行于后臺(tái)的服務(wù)。這個(gè)運(yùn)行“后臺(tái)”是指不可見,不是指在后臺(tái)線程中,事實(shí)上四大組件都是運(yùn)行在UI線程中,都不能在各自的生命周期方法中執(zhí)行耗時(shí)操作或者網(wǎng)絡(luò)請求。 Service的應(yīng)用場景還是比較多的,比如說在后臺(tái)播放音樂、實(shí)時(shí)去更新當(dāng)前地理位置的變化、新聞APP后臺(tái)去離線緩存內(nèi)容、進(jìn)程間通信等。

Service作為Android中四大組件之一,擁有重要的地位。Service具有和Activity一樣的級(jí)別,只是沒有界面,是運(yùn)行于后臺(tái)的服務(wù)。這個(gè)運(yùn)行“后臺(tái)”是指不可見,不是指在后臺(tái)線程中,事實(shí)上四大組件都是運(yùn)行在UI線程中,都不能在各自的生命周期方法中執(zhí)行耗時(shí)操作或者網(wǎng)絡(luò)請求。 Service的應(yīng)用場景還是比較多的,比如說在后臺(tái)播放音樂、實(shí)時(shí)去更新當(dāng)前地理位置的變化、新聞APP后臺(tái)去離線緩存內(nèi)容、進(jìn)程間通信等。

Service主要可以分為兩類:Local Service、Remote Service。比較常用的還是本地服務(wù),應(yīng)用于程序內(nèi)部??梢酝ㄟ^Context.startService()啟動(dòng)Service,通過 Context.stopService()結(jié)束服務(wù)。同時(shí)也可以Context.bindService()來綁定一個(gè)service服務(wù)自己,也可以 通過Context.unbindService()解綁。無論調(diào)用多少次startService,只需一句stopService就終結(jié)服務(wù)了。

Remote Service 用于android系統(tǒng)內(nèi)部的應(yīng)用程序之間??梢远x接口并把接口暴露出來,以便其他應(yīng)用進(jìn)行操作。客戶端建立到服務(wù)對象的連接,并通過那個(gè)連接來調(diào)用服 務(wù)。調(diào)用Context.bindService()方法建立連接,并啟動(dòng),以調(diào)用 Context.unbindService()關(guān)閉連接。多個(gè)客戶端可以綁定至同一個(gè)服務(wù)。如果服務(wù)此時(shí)還沒有加載,bindService()會(huì)先加 載它。

啟動(dòng)Service的方式有兩種,那對應(yīng)著的是Service的兩種生命周期??聪翯oogle官方的配圖,簡單直白明了,我就不再贅述了。

由于start和stop的方式來控制服務(wù)的方式比較簡單,在此也就不多贅述了。只是還需提醒在這種方式下,Activity與Service的通信就顯 得不那么直白簡單了,因?yàn)槲覀兡貌坏絊ervice的引用。如果你通過單例的形式去拿到Service的引用,進(jìn)而獲取其中的方法和屬性也未嘗不可,但是 入侵性比較嚴(yán)重,在此不推薦大家使用這種辦法。比較好的實(shí)現(xiàn)Activity和Service之間通信的是另一個(gè)重要的組件 BroadCastReceiver,下面的實(shí)例中會(huì)用到。

實(shí)戰(zhàn)使用的是一個(gè)簡單的音樂播放器。當(dāng)然了,使用的是bind和unbind的方式。bind即綁定服務(wù),unbind即解綁服務(wù),也進(jìn)而調(diào)用了 Service的onDestroy方法銷毀。bind可以直接拿到Service的引用,能直接操控service。bind可以用在當(dāng)前應(yīng)用中的業(yè)務(wù) 處理,也可以通過AIDL實(shí)現(xiàn)進(jìn)程間通信。本文先介紹第一種。簡單介紹下這個(gè)Demo實(shí)現(xiàn)的功能,它會(huì)播放手機(jī)SD卡上的一首歌曲,你可以對其開始和暫停 操作,界面會(huì)展示歌曲的時(shí)長以及歌曲播放的實(shí)時(shí)位置。兩者的交互的實(shí)現(xiàn)方式:1、類引用的直接調(diào)用   2、廣播機(jī)制,Service發(fā),Activity接收。

一、在MusicService中新建內(nèi)部類MyBinder,其中有個(gè)公有方法返回Service的實(shí)例

二、通過MusicService中的onBind方法返回MyBinder的實(shí)例,供Activity綁定成功后的回調(diào)

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

四、Activity中綁定,獲得回調(diào)的Binder,進(jìn)而得到MusicService實(shí)例

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

六、在Activity的onDestroy方法中,記得對Service進(jìn)行解綁。不然會(huì)和注冊的BroadCastReceiver一樣,會(huì)造成內(nèi)存泄漏

好了,今天的干貨分享就到這里了,明天為大家獻(xiàn)上基于AIDL和Service的進(jìn)程間通信的實(shí)現(xiàn)。

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

責(zé)任編輯:閆佳明 來源: oschina
相關(guān)推薦

2016-12-09 09:23:50

android組件Service

2014-03-27 15:34:55

Android組件Activity

2014-11-06 16:46:30

云計(jì)算

2013-01-10 14:21:24

Android開發(fā)組件Activities

2014-03-27 15:57:45

Android組件Activity

2010-08-05 10:22:46

Flex效果

2015-03-31 11:30:35

Informatica數(shù)據(jù)質(zhì)量

2014-07-28 14:46:40

Service

2011-03-21 09:01:49

CSS框架

2015-07-17 09:50:16

Carthage優(yōu)劣比較

2021-02-04 15:08:37

Vue漸進(jìn)式框架

2010-11-03 11:10:04

AndroidiPhone

2013-01-06 10:44:43

微軟Windows 8云計(jì)算

2017-12-08 14:26:19

Android面試知識(shí)點(diǎn)總結(jié)

2024-12-30 11:24:56

APMZipkinPinpoint

2016-03-30 11:51:55

2015-10-22 10:48:47

Android四大組件攔截

2021-09-17 10:50:14

容器 Linux

2019-01-23 16:13:02

大數(shù)據(jù)數(shù)據(jù)處理數(shù)據(jù)挖掘

2021-04-08 11:20:24

零信任網(wǎng)絡(luò)安全網(wǎng)絡(luò)攻擊
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)