android-服務(wù)Service

#組件

* Activity

* broadcast Receiver

* Service : 服務(wù)

> windows: 長期后臺(tái)運(yùn)行沒有界面的進(jìn)程就叫服務(wù).

>

> android: 長期后臺(tái)運(yùn)行,沒有界面的組件, 服務(wù)是運(yùn)行在當(dāng)前應(yīng)用程序進(jìn)程里面

##服務(wù)的應(yīng)用場(chǎng)景

> 長期后臺(tái)運(yùn)行,沒有界面的組件.

>

> 1. 監(jiān)視一個(gè)硬件是否被插入

> 2. 連接服務(wù)器刷新最新的數(shù)據(jù).

> 3. 定時(shí)的輪詢

注意: 服務(wù)是運(yùn)行在主線程里面(main), 不可以直接在服務(wù)里面編寫耗時(shí)的邏輯.

##進(jìn)程的優(yōu)先級(jí)

* Foreground process

> 前臺(tái)進(jìn)程: 用戶正在操作的應(yīng)用程序所在的進(jìn)程就是前臺(tái)進(jìn)程

* Visible process

> 可視進(jìn)程: 用戶已經(jīng)不能操作這個(gè)應(yīng)用程序了,但是界面用戶仍然可以看到

* Service process

> 服務(wù)進(jìn)程: 應(yīng)用程序有一個(gè)服務(wù)代碼正在運(yùn)行

* Background process

> 后臺(tái)進(jìn)程: 應(yīng)用程序有界面,但是界面被用戶最小化(home)

* Empty process

> 空進(jìn)程: 應(yīng)用程序沒有任何運(yùn)行的Activity,service.

前臺(tái)進(jìn)程>可視進(jìn)程>服務(wù)進(jìn)程>后臺(tái)進(jìn)程>空進(jìn)程

##服務(wù)的生命周期

* start的方式開啟服務(wù),服務(wù)只會(huì)被創(chuàng)建一次,在創(chuàng)建的時(shí)候執(zhí)行oncreate方法,一旦服務(wù)創(chuàng)建完畢,再去開啟service就不會(huì)重復(fù)執(zhí)行oncreate方法了.只會(huì)執(zhí)行onstart和onstartcommand

* 服務(wù)停止 stopService() ondestroy() 服務(wù)只會(huì)別停止一次

* startService()

> 缺陷:? 我們不可以調(diào)用服務(wù)的方法, 不可以與服務(wù)進(jìn)行通信.

* bindService() 綁定服務(wù)

> 可以間接的調(diào)用到服務(wù)里面的方法, 可以與服務(wù)進(jìn)行通信.

##綁定服務(wù)調(diào)用服務(wù)方法的步驟

1. 編寫服務(wù)代碼

public IBinder onBind(Intent intent) {}

2. 在服務(wù)內(nèi)部定義一個(gè)代理人對(duì)象 MyBinder

代理人對(duì)象有一個(gè)方法可以間接的調(diào)用服務(wù)內(nèi)部的方法

3. 在onbind方法里面返回代理人對(duì)象

4. 在Activity代碼采用綁定的方式連接到服務(wù)

bindService(intent, new MyConn(),? BIND_AUTO_CREATE);

5. 在serviceConnection的實(shí)現(xiàn)類里面有一個(gè)方法,獲取到服務(wù)返回的代理人對(duì)象

public void onServiceConnected(ComponentName name, IBinder service)

6. 強(qiáng)制類型轉(zhuǎn)換IBinder轉(zhuǎn)化成 MyBinder類型

myBinder = (MyBinder) service;

7. 調(diào)用代理人對(duì)象的方法--間接調(diào)用了服務(wù)里面的方法.

##綁定方式開啟服務(wù)的生命周期

* 綁定的方式開啟服務(wù),如果服務(wù)不存在, oncreate--->onbind

* 服務(wù)的onstart和onstartcommand方法不會(huì)被執(zhí)行.

* 解除綁定服務(wù) onunbind()--->ondetroy()

* 多次綁定服務(wù),服務(wù)只會(huì)被創(chuàng)建一次,oncreate方法只會(huì)被執(zhí)行一次

* 多次綁定服務(wù),onbind方法不會(huì)被重復(fù)調(diào)用.

* 在實(shí)際開發(fā)的時(shí)候,如果需要調(diào)用服務(wù)的方法,就綁定服務(wù),只能綁定一次

* 服務(wù)只可以被解綁一次,如果用同一個(gè)conn對(duì)象多次解綁,服務(wù)會(huì)拋出一次.

##兩種開啟服務(wù)方式的比較

* start的方式開啟服務(wù)

> 服務(wù)一旦開啟,長期后臺(tái)運(yùn)行,服務(wù)和開啟者(Activity)沒有任何的關(guān)系,開啟者退出了,服務(wù)還是繼續(xù)在后臺(tái)長期運(yùn)行, 開啟者(Activity)不可以調(diào)用服務(wù)里面的方法. 在系統(tǒng)設(shè)置界面里面可以觀察到

* bind的方式開啟服務(wù)

> 不求同時(shí)生,但求同時(shí)死. 如果開啟者(Activity)退出了, 服務(wù)也會(huì)跟著掛掉.

> 開啟者(Activity)可以間接的利用中間人調(diào)用服務(wù)里面的方法.在系統(tǒng)設(shè)置界面看不到的.

服務(wù)如果被開啟同時(shí)被綁定,服務(wù)就停不掉了.必須解除綁定服務(wù)才可以停止服務(wù).

##混合的方式開啟服務(wù).

* 為了保證服務(wù)又能長期后臺(tái)運(yùn)行,又能調(diào)用到服務(wù)里面的方法.

* 采用混合的方式開啟服務(wù).

> 請(qǐng)嚴(yán)格按照步驟編寫代碼:

1. start的方式開啟服務(wù) (保證服務(wù)長期后臺(tái)運(yùn)行)

2. bind的方式綁定服務(wù) (調(diào)用服務(wù)的方法)

3. unbind的方式解除綁定服務(wù)

4. stop的方式停止服務(wù)

##本地服務(wù)和遠(yuǎn)程服務(wù)

* 本地服務(wù) local service

> 服務(wù)的代碼在當(dāng)前應(yīng)用程序的內(nèi)部

* 遠(yuǎn)程服務(wù) remote service

> 服務(wù)的代碼在另外一個(gè)應(yīng)用程序里面

##重要概念

* 進(jìn)程

> 操作系統(tǒng)分配的獨(dú)立的內(nèi)存空間.

* IPC

> inter process communication 進(jìn)程間通訊

* aidl

> android interface definition language 安卓接口定義語言

##綁定遠(yuǎn)程服務(wù)調(diào)用服務(wù)方法的流程

1. 跟本地服務(wù)的代碼編寫是一樣.

2. 遠(yuǎn)程服務(wù)的接口定義文件.java--->.aidl

3. 把接口定義文件的訪問修飾符全部刪除 public private

4. 原來代理人MyBinder extend Binder implemet IService--> extends IService.Stub

5. 先把遠(yuǎn)程服務(wù).aidl文件拷貝到本地應(yīng)用程序的工程目錄里面,包名一致

6. iService = IService.Stub.asInterface(service);得到遠(yuǎn)程服務(wù)的代理對(duì)象

7. 通過代理對(duì)象調(diào)用遠(yuǎn)程服務(wù)的方法.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末向胡,一起剝皮案震驚了整個(gè)濱河市淡诗,隨后出現(xiàn)的幾起案子痊远,更是在濱河造成了極大的恐慌,老刑警劉巖掰伸,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饭弓,死亡現(xiàn)場(chǎng)離奇詭異橱野,居然都是意外死亡灶搜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門瞎疼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來科乎,“玉大人,你說我怎么就攤上這事贼急∶┟” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵竿裂,是天一觀的道長玉吁。 經(jīng)常有香客問我照弥,道長腻异,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任这揣,我火速辦了婚禮悔常,結(jié)果婚禮上影斑,老公的妹妹穿的比我還像新娘。我一直安慰自己机打,他們只是感情好矫户,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著残邀,像睡著了一般皆辽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上芥挣,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天驱闷,我揣著相機(jī)與錄音,去河邊找鬼空免。 笑死空另,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蹋砚。 我是一名探鬼主播扼菠,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼坝咐!你這毒婦竟也來了循榆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤墨坚,失蹤者是張志新(化名)和其女友劉穎冯痢,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體框杜,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浦楣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了咪辱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片振劳。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖油狂,靈堂內(nèi)的尸體忽然破棺而出历恐,到底是詐尸還是另有隱情,我是刑警寧澤专筷,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布弱贼,位于F島的核電站,受9級(jí)特大地震影響磷蛹,放射性物質(zhì)發(fā)生泄漏吮旅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一味咳、第九天 我趴在偏房一處隱蔽的房頂上張望庇勃。 院中可真熱鬧檬嘀,春花似錦、人聲如沸责嚷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽罕拂。三九已至揍异,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間爆班,已是汗流浹背蒿秦。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛋济,地道東北人棍鳖。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像碗旅,于是被迫代替她去往敵國和親渡处。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容