service兩種啟動(dòng)模式的區(qū)別

一.Service的第一種啟動(dòng)方式

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

使用Service的步驟:

1.定義一個(gè)類繼承Service

2.在Manifest.xml文件中配置該Service

3.使用Context的startService(Intent)方法啟動(dòng)該Service

4.不再使用時(shí),調(diào)用stopService(Intent)方法停止該服務(wù)

使用這種start方式啟動(dòng)的Service的生命周期如下:

onCreate()--->onStartCommand()(onStart()方法已過時(shí)) --->onDestory()

說明:如果服務(wù)已經(jīng)開啟,不會(huì)重復(fù)的執(zhí)行onCreate(), 而是會(huì)調(diào)用onStart()和onStartCommand()。

服務(wù)停止的時(shí)候調(diào)用onDestory()秋冰。服務(wù)只會(huì)被停止一次。

特點(diǎn):一旦服務(wù)開啟跟調(diào)用者(開啟者)就沒有任何關(guān)系了值戳。

開啟者退出了吏饿,開啟者掛了,服務(wù)還在后臺(tái)長期的運(yùn)行笆怠。

開啟者不能調(diào)用服務(wù)里面的方法铝耻。

二.Service的第二種啟動(dòng)方式

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

使用Service的步驟:

1.定義一個(gè)類繼承Service

2.在Manifest.xml文件中配置該Service

3.使用Context的bindService(Intent, ServiceConnection, int)方法啟動(dòng)該Service

4.不再使用時(shí),調(diào)用unbindService(ServiceConnection)方法停止該服務(wù)

使用這種start方式啟動(dòng)的Service的生命周期如下:

onCreate()--->onBind()--->onunbind()--->onDestory()

注意:綁定服務(wù)不會(huì)調(diào)用onstart()或者onstartcommand()方法

特點(diǎn):bind的方式開啟服務(wù)蹬刷,綁定服務(wù)瓢捉,調(diào)用者掛了,服務(wù)也會(huì)跟著掛掉办成。

綁定者可以調(diào)用服務(wù)里面的方法泡态。

到這里,兩種方式的區(qū)別已經(jīng)明確了迂卢。

問題來了某弦。

綁定者如何調(diào)用服務(wù)里的方法呢桐汤?

首先定義一個(gè)Service的子類。

publicclassMyServiceextendsService{publicMyService(){? ? }@OverridepublicIBinderonBind(Intent intent){//返回MyBind對(duì)象returnnewMyBinder();? ? }privatevoidmethodInMyService(){? ? ? ? Toast.makeText(getApplicationContext(),"服務(wù)里的方法執(zhí)行了靶壮。怔毛。。",? ? ? ? ? ? ? ? Toast.LENGTH_SHORT).show();? ? }/**

* 該類用于在onBind方法執(zhí)行后返回的對(duì)象腾降,

* 該對(duì)象對(duì)外提供了該服務(wù)里的方法

*/privateclassMyBinderextendsBinderimplementsIMyBinder{@OverridepublicvoidinvokeMethodInMyService(){? ? ? ? ? ? methodInMyService();? ? ? ? }? ? }}

自定義的MyBinder接口用于保護(hù)服務(wù)中不想讓外界訪問的方法拣度。

publicinterfaceIMyBinder{voidinvokeMethodInMyService();}

接著在Manifest.xml文件中配置該Service

在Activity中綁定并調(diào)用服務(wù)里的方法

簡單布局:

綁定服務(wù)的Activity:

publicclassMainActivityextendsActivity{privateMyConn conn;privateIntent intent;privateIMyBinder myBinder;@OverrideprotectedvoidonCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);? ? ? ? setContentView(R.layout.activity_main);? ? }//開啟服務(wù)按鈕的點(diǎn)擊事件publicvoidstart(View view){? ? ? ? intent =newIntent(this, MyService.class);? ? ? ? conn =newMyConn();//綁定服務(wù),// 第一個(gè)參數(shù)是intent對(duì)象螃壤,表面開啟的服務(wù)抗果。// 第二個(gè)參數(shù)是綁定服務(wù)的監(jiān)聽器// 第三個(gè)參數(shù)一般為BIND_AUTO_CREATE常量,表示自動(dòng)創(chuàng)建bindbindService(intent, conn, BIND_AUTO_CREATE);? ? }//調(diào)用服務(wù)方法按鈕的點(diǎn)擊事件publicvoidinvoke(View view){? ? ? ? myBinder.invokeMethodInMyService();? ? }privateclassMyConnimplementsServiceConnection{@OverridepublicvoidonServiceConnected(ComponentName componentName, IBinder iBinder){//iBinder為服務(wù)里面onBind()方法返回的對(duì)象奸晴,所以可以強(qiáng)轉(zhuǎn)為IMyBinder類型myBinder = (IMyBinder) iBinder;? ? ? ? }@OverridepublicvoidonServiceDisconnected(ComponentName componentName){? ? ? ? }? ? }}

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

在服務(wù)的內(nèi)部創(chuàng)建一個(gè)內(nèi)部類 提供一個(gè)方法窖张,可以間接調(diào)用服務(wù)的方法

實(shí)現(xiàn)服務(wù)的onbind方法,返回的就是這個(gè)內(nèi)部類

在activity 綁定服務(wù)蚁滋。bindService();

在服務(wù)成功綁定的回調(diào)方法onServiceConnected宿接, 會(huì)傳遞過來一個(gè) IBinder對(duì)象

強(qiáng)制類型轉(zhuǎn)化為自定義的接口類型,調(diào)用接口里面的方法辕录。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末睦霎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子走诞,更是在濱河造成了極大的恐慌副女,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚣旱,死亡現(xiàn)場離奇詭異碑幅,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)塞绿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門沟涨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人异吻,你說我怎么就攤上這事裹赴。” “怎么了诀浪?”我有些...
    開封第一講書人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵棋返,是天一觀的道長。 經(jīng)常有香客問我雷猪,道長睛竣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任求摇,我火速辦了婚禮射沟,結(jié)果婚禮上嫉你,老公的妹妹穿的比我還像新娘。我一直安慰自己躏惋,他們只是感情好幽污,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著簿姨,像睡著了一般距误。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上扁位,一...
    開封第一講書人閱讀 52,696評(píng)論 1 312
  • 那天准潭,我揣著相機(jī)與錄音,去河邊找鬼域仇。 笑死刑然,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的暇务。 我是一名探鬼主播泼掠,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼垦细!你這毒婦竟也來了择镇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤括改,失蹤者是張志新(化名)和其女友劉穎腻豌,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嘱能,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吝梅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惹骂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苏携。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖析苫,靈堂內(nèi)的尸體忽然破棺而出兜叨,到底是詐尸還是另有隱情,我是刑警寧澤衩侥,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站矛物,受9級(jí)特大地震影響茫死,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜履羞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一峦萎、第九天 我趴在偏房一處隱蔽的房頂上張望屡久。 院中可真熱鬧,春花似錦爱榔、人聲如沸被环。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽筛欢。三九已至,卻和暖如春唇聘,著一層夾襖步出監(jiān)牢的瞬間版姑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來泰國打工迟郎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留剥险,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓宪肖,卻偏偏與公主長得像表制,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子控乾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

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