最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android四大組件之Service服務(wù)詳細(xì)講解

 更新時(shí)間:2022年07月20日 15:16:36   作者:半身風(fēng)雪  
Android的服務(wù)是開(kāi)發(fā)Android應(yīng)用程序的重要組成部分。不同于活動(dòng)Activity,服務(wù)是在后臺(tái)運(yùn)行,服務(wù)沒(méi)有接口,生命周期也與活動(dòng)Activity非常不同。通過(guò)使用服務(wù)我們可以實(shí)現(xiàn)一些后臺(tái)操作,比如想從遠(yuǎn)程服務(wù)器加載一個(gè)網(wǎng)頁(yè)等,下面來(lái)看看詳細(xì)內(nèi)容,需要的朋友可以參考下

上一節(jié):Activity

簡(jiǎn)介:在Android組件中最基本也是最為常見(jiàn)的四大組件:

  • Activity
  • Service服務(wù)
  • Content Provider內(nèi)容提供者
  • BroadcastReceiver廣播接收器

一、Service是什么

Service是Android系統(tǒng)中的四大組件之一,它是一種長(zhǎng)生命周期的,沒(méi)有可視化界面,運(yùn)行于后臺(tái)的一種服務(wù)程序。

Service 有的啟動(dòng)方式有兩種:

  • startService啟動(dòng)
  • bindService啟動(dòng)

二、Service 的啟動(dòng)方式

2.1、startService 顯示啟動(dòng)

Service啟動(dòng)

首先我們創(chuàng)建一個(gè)MyService 類,并且繼承自Service

public class MyService extends Service {
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

這里需要先實(shí)現(xiàn)onBind方法,onBind() 是Service必須實(shí)現(xiàn)的方法,返回的IBinder對(duì)象相當(dāng)于Service組件的代理對(duì)象,Service允許其他程序組件通過(guò)IBinder對(duì)象來(lái)訪問(wèn)Service內(nèi)部數(shù)據(jù),這樣即可實(shí)現(xiàn)其他程序組件與Service之間的通信。

AndroidManifest.xml 清單文件中注冊(cè)

<!--        組件必須要在清單文件里面注冊(cè)-->
<service android:name=".MyService" />

顯式啟動(dòng)通過(guò)類名稱來(lái)啟動(dòng),需要在Intent中指明Service所在的類,并調(diào)用startService (lntent)啟動(dòng)service。這里我使用按鈕測(cè)試,需要在activity 中添加一個(gè) serviceStart 按鈕,用來(lái)演示

public void onClick(View view) {
    startService(new Intent(this, MyService.class));
}

回到MyService 類,并且添加一個(gè)onCreate 生命周期,用于驗(yàn)證我們的啟動(dòng)

@Override
public void onCreate() {
    super.onCreate();
    System.out.println("MyService.onCreate service 啟動(dòng)成功");
}

運(yùn)行結(jié)果

通過(guò)該方式啟動(dòng)Service,訪問(wèn)者與Service之間沒(méi)有關(guān)聯(lián),即使訪問(wèn)者退出了,Service也仍然運(yùn)行。

按上面的說(shuō)法,即使訪問(wèn)者退出了,Service也仍然運(yùn)行,那么我們?cè)撛趺唇Y(jié)束呢?

Service 停止

我們?cè)贏ctivity 中,再添加一個(gè)停止按鈕。

顯式啟動(dòng)停止Service,需要將啟動(dòng)Service的Intent傳遞給stopService (Intent)函數(shù)。

public void onClickStop(View view) {
    stopService(new Intent(this, MyService.class));
}

回到MyService 類,并且添加一個(gè)onDestroy 生命周期,用于驗(yàn)證我們的停止

@Override
public void onDestroy() {
    super.onDestroy();
    System.out.println("MyService.onDestroy service 停止");
}

運(yùn)行結(jié)果

上面我說(shuō)startService 是顯示啟動(dòng),那么是不是還有對(duì)應(yīng)的隱式啟動(dòng)呢?確實(shí)是有,但是從Android5.0開(kāi)始,Google要求必須使用顯示Intent啟動(dòng)Service,所以隱式啟動(dòng)咱就不介紹了。

2.2、bindService 綁定啟動(dòng)

使用bindService()方法啟動(dòng)Service

我們?cè)诨氐紸ctivity 中,再添加兩個(gè)按鈕,onClickBindServiceStart 和 onClickUnBindService 按鈕

public void onClickBindServiceStart(View view) {
    bindService(new Intent(this, MyService.class), connection, Context.BIND_AUTO_CREATE);
}

參數(shù)說(shuō)明:

  • service:該參數(shù)通過(guò)Intent指定需要啟動(dòng)的service。
  • connection:該參數(shù)是ServiceConnnection對(duì)象,當(dāng)綁定成功后,系統(tǒng)將調(diào)用serviceConnnection的onServiceConnected ()方法,當(dāng)綁定意外斷開(kāi)后,系統(tǒng)將調(diào)用ServiceConnnection中的onServiceDisconnected方法。
  • flags:該參數(shù)指定綁定時(shí)是否自動(dòng)創(chuàng)建Service。如果指定為BIND_AUTO_CREATE,則自動(dòng)創(chuàng)建,指定為0,則不自動(dòng)創(chuàng)建。

初始化一個(gè)connection

private ServiceConnection connection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
    }
    @Override
    public void onServiceDisconnected(ComponentName componentName) {
    }
};

綁定啟動(dòng)中,當(dāng)調(diào)用者通過(guò)bindService()函數(shù)綁定Service時(shí),onCreate()函數(shù)和onBinde ( )函數(shù)將被先后調(diào)用。

運(yùn)行結(jié)果

通過(guò)該方式啟動(dòng)Service,訪問(wèn)者與Service綁定在一起,訪問(wèn)者一旦退出了,Service也就終止了。

unbindService 停止服務(wù)

取消綁定僅需要使用unbindService()方法,并將ServiceConnnection傳遞給unbindService()方法

在停止服務(wù)點(diǎn)擊事件中使用 unbindService() 方法

public void onClickUnBindService(View view) {
    unbindService(connection);
}

回到MyService 類,添加onUnbind 生命周期方法

@Override
public boolean onUnbind(Intent intent) {
    System.out.println("MyService.onUnbind");
    return super.onUnbind(intent);
}

當(dāng)調(diào)用者通過(guò)unbindService()函數(shù)取消綁定Service時(shí),onUnbind()函數(shù)將被調(diào)用。如果onUnbind()函數(shù)返回true,則表示重新綁定服務(wù)時(shí),onRebind ()函數(shù)將被調(diào)用。

運(yùn)行結(jié)果

需要注意的是,unbindService()方法成功后,系統(tǒng)并不會(huì)調(diào)用onServiceConnected(),因?yàn)?code>onServiceConnected()只會(huì)在意外斷開(kāi)綁定時(shí)才被調(diào)用。

這里別忘了在onDestroy() 銷毀bindService

@Override
protected void onDestroy() {
    super.onDestroy();
    unbindService(connection);
}

三、Service 生命周期

startService啟動(dòng)的生命周期

onCreate() 當(dāng)Service第一次被創(chuàng)建時(shí),由系統(tǒng)調(diào)用。

onStartCommand() 當(dāng)startService方法啟動(dòng)Service時(shí),該方法被調(diào)用。

onDestroy() 當(dāng)Service不再使用時(shí),由系統(tǒng)調(diào)用。

注意:一個(gè)startService只會(huì)創(chuàng)建一次,銷毀一次,但可以開(kāi)始多次,因此,onCreate()和onDestroy()方法只會(huì)被調(diào)用一次,而onStart()方法會(huì)被調(diào)用多次。

bindService啟動(dòng)的生命周期

onCreate() 當(dāng)Service被創(chuàng)建時(shí),由系統(tǒng)調(diào)用。

onBind() 當(dāng)bindService方法啟動(dòng)Service時(shí),該方法被調(diào)用。

onUnbind() 當(dāng)unbindService方法解除綁定時(shí),該方法被調(diào)用。

onDestroy() 當(dāng)Service不再使用時(shí),由系統(tǒng)調(diào)用。

注意:一個(gè)bindService可以創(chuàng)建多次,銷毀多次,重復(fù)使用。

到此這篇關(guān)于Android四大組件之Service服務(wù)詳細(xì)講解的文章就介紹到這了,更多相關(guān)Android Service服務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Kotlin基礎(chǔ)學(xué)習(xí)之循環(huán)和異常

    Kotlin基礎(chǔ)學(xué)習(xí)之循環(huán)和異常

    最近在學(xué)習(xí)kotlin,Kotlin 是一個(gè)基于 JVM 的新的編程語(yǔ)言,下面這篇文章主要給大家介紹了關(guān)于Kotlin基礎(chǔ)學(xué)習(xí)之循環(huán)和異常的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-12-12
  • Android編程讀取Assets所有文件(遍歷每一個(gè)文件夾)并存入sdcard的方法

    Android編程讀取Assets所有文件(遍歷每一個(gè)文件夾)并存入sdcard的方法

    這篇文章主要介紹了Android編程讀取Assets所有文件(遍歷每一個(gè)文件夾)并存入sdcard的方法,涉及Android針對(duì)文件與目錄的遍歷及I/O操作相關(guān)技巧,需要的朋友可以參考下
    2016-02-02
  • Android中兩個(gè)Activity之間數(shù)據(jù)傳遞及返回問(wèn)題

    Android中兩個(gè)Activity之間數(shù)據(jù)傳遞及返回問(wèn)題

    本篇文章主要介紹了Android中兩個(gè)Activity之間數(shù)據(jù)傳遞及返回問(wèn)題,這里整理了詳細(xì)的代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • android自定義view實(shí)現(xiàn)數(shù)字進(jìn)度條

    android自定義view實(shí)現(xiàn)數(shù)字進(jìn)度條

    這篇文章主要為大家詳細(xì)介紹了android自定義view實(shí)現(xiàn)數(shù)字進(jìn)度條,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Android中解決WebView上下滑動(dòng)監(jiān)聽(tīng)問(wèn)題

    Android中解決WebView上下滑動(dòng)監(jiān)聽(tīng)問(wèn)題

    本篇文章主要介紹了Android中解決WebView滑動(dòng)監(jiān)聽(tīng)問(wèn)題,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • Android 炫舞漫天飛雪效果圖

    Android 炫舞漫天飛雪效果圖

    這篇文章主要介紹了Android 炫舞漫天飛雪效果圖的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • 如何在android中使用html作布局文件

    如何在android中使用html作布局文件

    在企業(yè)級(jí)的android開(kāi)發(fā)中,使用html頁(yè)面進(jìn)行布局,也有很多的優(yōu)勢(shì)(例如:簡(jiǎn)單,大部分開(kāi)發(fā)人員及美工都熟悉,方便統(tǒng)一進(jìn)行更新,管理)
    2013-11-11
  • Kotlin使用滾動(dòng)控件RecyclerView實(shí)例教程

    Kotlin使用滾動(dòng)控件RecyclerView實(shí)例教程

    RecyclerView是Android一個(gè)更強(qiáng)大的控件,其不僅可以實(shí)現(xiàn)和ListView同樣的效果,還有優(yōu)化了ListView中的各種不足。其可以實(shí)現(xiàn)數(shù)據(jù)縱向滾動(dòng),也可以實(shí)現(xiàn)橫向滾動(dòng)(ListView做不到橫向滾動(dòng))。接下來(lái)講解RecyclerView的用法
    2022-12-12
  • Android 桌面快捷方式實(shí)現(xiàn)實(shí)例詳解

    Android 桌面快捷方式實(shí)現(xiàn)實(shí)例詳解

    這篇文章主要為大家介紹了Android 桌面快捷方式實(shí)現(xiàn)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 一文讀懂Android?Kotlin的數(shù)據(jù)流

    一文讀懂Android?Kotlin的數(shù)據(jù)流

    這篇文章主要介紹了一文讀懂Android?Kotlin的數(shù)據(jù)流,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-07-07

最新評(píng)論

台山市| 巴东县| 呼玛县| 渝北区| 普兰店市| 台前县| 龙胜| 无锡市| 三门县| 六安市| 牙克石市| 金湖县| 敦化市| 北安市| 阳西县| 平安县| 九江市| 克什克腾旗| 丹江口市| 宁城县| 陆河县| 大方县| 达孜县| 庆云县| 忻城县| 香港| 石河子市| 双峰县| 甘德县| 晋宁县| 河西区| 泽州县| 尚志市| 乃东县| 门头沟区| 海淀区| 海兴县| 承德市| 哈尔滨市| 吴旗县| 资源县|