欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android編程實(shí)現(xiàn)開始及停止service的方法

 更新時間:2016年01月19日 14:16:02   作者:牛搞  
這篇文章主要介紹了Android編程實(shí)現(xiàn)開始及停止service的方法,涉及Android針對service的開始、停止、綁定等操作相關(guān)技巧與注意事項,需要的朋友可以參考下

本文實(shí)例講述了Android編程實(shí)現(xiàn)開始及停止service的方法。分享給大家供大家參考,具體如下:

開始一個Service

你可以從一個activity或從其它應(yīng)用的組件通過傳遞一個Intent(指定了要啟動的服務(wù))給startService()啟動一個服務(wù).Android系統(tǒng)然后調(diào)用service的onStartCommand()方法并且把Intent傳遞給它.(你永遠(yuǎn)不能直接調(diào)用onStartCommand().)

例如,一個activity可以在調(diào)用startService()時使用一個明確的intent開始前文的例子中的service(HelloSevice):

Intentintent = new Intent(this, HelloService.class);
startService(intent);

startService()方法會立即返回然后Android系統(tǒng)調(diào)用service的onStartCommand()方法.但是如果service尚沒有運(yùn)行,系統(tǒng)會先調(diào)用onCreate(),然后調(diào)用onStartCommand().

如果service沒有提供綁定功能,傳給startService()的intent是應(yīng)用組件與service之間唯一的通訊方式.然而,如果你希望service回發(fā)一個結(jié)果,那么啟動這個service的客戶端可以創(chuàng)建一個用于廣播(使用getBroadcast())的PendingIntent然后放在intent中傳給service,service然后就可以使用廣播來回送結(jié)果.

不同的啟動請求導(dǎo)致對service的onStartCommand()的不同調(diào)用,但停止service的請求只有一個(使用stopSelf()或stopService()).

停止一個service

一個"啟動的"service必須管理其自己的生命期.這表示,系統(tǒng)不會停止或銷毀這種service,除非內(nèi)存不夠用了并且service在onStartCommand()返回后會繼續(xù)運(yùn)行.所以,service必須調(diào)用stopSelf()停止自己或由另一個組件調(diào)用stopService()來停止它.

一旦通過stopSelf()或stopService()發(fā)出了停止請求,系統(tǒng)就會盡可能快地銷毀service.

然而,如果你的service同時處理多個對onStartCommand()的請求,那么你不應(yīng)在處理完一個請求之后就停止service,因?yàn)槟憧赡芤呀?jīng)又收到了新的啟動請求(在第個完成后停止將會結(jié)束掉第二個).要避免這個問題,你可以使用stopSelf(int)來保證你的停止請求對應(yīng)于你最近的開始請求.也就是,當(dāng)你調(diào)用stopSelf(int)時,你傳遞開始請求的ID(傳遞給onStartCommand()的startId)給service,如果service在你調(diào)用stopSelf(int)之前收到一了個新的開始請求,發(fā)現(xiàn)ID不同,于是service將不會停止.

注意:你的應(yīng)用在完成工作后停止它所有的service是非常重要的.這可以避免浪費(fèi)系統(tǒng)資源和消耗電量.如果需要,其它的組件可以調(diào)用stopService()停止service.即使你為service啟用了綁定,你也必須自己停止service,甚至它收到了對onStartCommand()的調(diào)用也這樣.

創(chuàng)建一個綁定的Service

一個綁定的service是允許應(yīng)用的組件通過調(diào)用bindService()來綁定它以創(chuàng)建一個能長期存在的連接(并且一般不允許組件調(diào)用startService()來啟動它).

當(dāng)你的activity或其它組件想與service交互或你的應(yīng)用想基于IPC的向其它應(yīng)用提供功能時,你應(yīng)該創(chuàng)建一個綁定的service.

要創(chuàng)建一個綁定的service,你必須實(shí)現(xiàn)回調(diào)方法onBind(),還要在其中返回一個IBinder,這個IBinder定義了與service通訊的接口.其它應(yīng)用組件就可以在之后調(diào)用bindService()來接收這個接口并開始調(diào)用service的方法.service只在有應(yīng)用組件綁定到它時才活著,所以當(dāng)沒有組件綁定到它時,系統(tǒng)就會宰了它(你不需去停止一個綁定的service,跟用onStartCommand()啟動的service不一樣).

要創(chuàng)建一個綁定的service,首先要做的就是定義客戶端如何與service通訊的接口.這個接口必須是IBinder的一個實(shí)現(xiàn),并且必須被回調(diào)方法onBind()返回.一旦客戶端接收到IBinder,它就可以開始與service進(jìn)行交互.

多個客戶端可以一起綁定到一個service.當(dāng)一個客戶端完成與service的交互,它調(diào)用unbindService()來解除綁定.一旦不再有任何客戶端綁定到service,系統(tǒng)就宰了這個service.

有很多方法來實(shí)現(xiàn)一個綁定的service并且這些實(shí)現(xiàn)要比"開始的"service難懂得多.

發(fā)送通知給用戶

一旦開始運(yùn)行,一個service可以通過Toast通知或狀態(tài)欄通來通知用戶一些事件.

一個toast通知是一個出現(xiàn)在當(dāng)前窗口表面上并過一會就消失的消息.當(dāng)一個狀態(tài)欄通知提供一個帶有消息的圖標(biāo)到狀態(tài)欄,用就可以先定它來執(zhí)行一些動作(比如啟動一個activity).

通常,一個狀態(tài)欄通知是當(dāng)一些后臺工作(比如一個文件下載完成了)完成后通知用戶可以對它進(jìn)行動作的最佳方式.當(dāng)用戶選擇這個通知時,它可以開始一個activity(比如可以查看下載的文件).

更多關(guān)于Android組件相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android基本組件用法總結(jié)

希望本文所述對大家Android程序設(shè)計有所幫助。

相關(guān)文章

  • Android 使用SharePerference判斷是否為第一次登陸的實(shí)現(xiàn)代碼

    Android 使用SharePerference判斷是否為第一次登陸的實(shí)現(xiàn)代碼

    很多app中在第一次安裝登陸時會有引導(dǎo)歡迎界面,第二次打開時就不再顯示引導(dǎo)頁面。這個怎么實(shí)現(xiàn)呢?下面小編給大家介紹下使用SharePerference判斷是否為第一次登陸的實(shí)現(xiàn)代碼,需要的的朋友參考下吧
    2017-03-03
  • Android編程設(shè)計模式之備忘錄模式詳解

    Android編程設(shè)計模式之備忘錄模式詳解

    這篇文章主要介紹了Android編程設(shè)計模式之備忘錄模式,結(jié)合實(shí)例形式詳細(xì)分析了Android備忘錄模式的概念、原理、應(yīng)用場景、用法及相關(guān)操作注意事項,需要的朋友可以參考下
    2017-12-12
  • 基于Android實(shí)現(xiàn)可滾動的環(huán)形菜單效果

    基于Android實(shí)現(xiàn)可滾動的環(huán)形菜單效果

    這篇文章主要為大家詳細(xì)介紹了Android如何使用kotlin實(shí)現(xiàn)可滾動的環(huán)形菜單,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Android編程開發(fā)中ListView的常見用法分析

    Android編程開發(fā)中ListView的常見用法分析

    這篇文章主要介紹了Android編程開發(fā)中ListView的常見用法,較為詳細(xì)的分析了ListView的功能及常見使用方法,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • Android 使用ViewPager實(shí)現(xiàn)左右循環(huán)滑動及輪播效果

    Android 使用ViewPager實(shí)現(xiàn)左右循環(huán)滑動及輪播效果

    ViewPager是一個常用的Android組件,不過通常我們使用ViewPager的時候不能實(shí)現(xiàn)左右無限循環(huán)滑動,在滑到邊界的時候會看到一個不能翻頁的動畫,可能影響用戶體驗(yàn),接下來通過本文給大家介紹Android 使用ViewPager實(shí)現(xiàn)左右循環(huán)滑動及輪播效果,一起看看吧
    2017-02-02
  • Android Flutter實(shí)現(xiàn)興趣標(biāo)簽選擇功能

    Android Flutter實(shí)現(xiàn)興趣標(biāo)簽選擇功能

    我們在首次使用內(nèi)容類 App 的時候,不少都會讓我們選擇個人偏好,通過這些標(biāo)簽選擇可以預(yù)先知道用戶的偏好信息。我們本篇就來看看 Flutter 如何實(shí)現(xiàn)興趣標(biāo)簽的選擇,需要的可以參考一下
    2022-11-11
  • Android編程開發(fā)錄音和播放錄音簡單示例

    Android編程開發(fā)錄音和播放錄音簡單示例

    這篇文章主要介紹了Android編程開發(fā)錄音和播放錄音的方法,結(jié)合實(shí)例形式分析了Android多媒體開發(fā)中音頻操作的相關(guān)技巧,需要的朋友可以參考下
    2016-08-08
  • Android?Flutter繪制有趣的?loading加載動畫

    Android?Flutter繪制有趣的?loading加載動畫

    在網(wǎng)絡(luò)速度較慢的場景,一個有趣的加載會提高用戶的耐心和對?App?的好感。本篇我們利用Flutter?的?PathMetric來玩幾個有趣的?loading?效果,感興趣的可以動手嘗試一下
    2022-07-07
  • Android開發(fā)之DOM解析xml文件的方法

    Android開發(fā)之DOM解析xml文件的方法

    這篇文章主要介紹了Android開發(fā)之DOM解析xml文件的方法,涉及Android中DOM工廠對象的創(chuàng)建,文檔的獲取及節(jié)點(diǎn)的遍歷技巧,需要的朋友可以參考下
    2015-12-12
  • Android事件分發(fā)機(jī)制(上) ViewGroup的事件分發(fā)

    Android事件分發(fā)機(jī)制(上) ViewGroup的事件分發(fā)

    這篇文章主要為大家詳細(xì)介紹了Android ViewGroup的事件分發(fā)機(jī)制上篇,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01

最新評論