亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android服務(wù)Service教程

 更新時間:2021年11月04日 10:58:51   作者:banq  
Android的服務(wù)是開發(fā)Android應(yīng)用程序的重要組成部分。不同于活動Activity,服務(wù)是在后臺運行,服務(wù)沒有接口,生命周期也與活動Activity非常不同。通過使用服務(wù)我們可以實現(xiàn)一些后臺操作,比如想從遠程服務(wù)器加載一個網(wǎng)頁等,下面來看看詳細內(nèi)容,需要的朋友可以參考下

前言:

Android的服務(wù)是開發(fā)Android應(yīng)用程序的重要組成部分。不同于活動Activity,服務(wù)是在后臺運行,服務(wù)沒有接口,生命周期也與活動Activity非常不同。通過使用服務(wù)我們可以實現(xiàn)一些后臺操作,比如想從遠程服務(wù)器加載一個網(wǎng)頁等。服務(wù)能幫助我們在Android中實現(xiàn)多任務(wù)。

  我們已經(jīng)知道,安卓的活動可以啟動,停止,當系統(tǒng)資源太低時可以銷毀,服務(wù)被設(shè)計為實現(xiàn)具有更長執(zhí)行時間的任務(wù)。安卓的服務(wù)可以從活動Activity中啟動,也可以從一個廣播接收器和其他服務(wù)中啟動。

  必須注意,使用服務(wù)并不需要自動創(chuàng)建新的線程,所以如果在服務(wù)中我們實現(xiàn)一個簡單的邏輯,這不需要很長的時間去處理,我們其實不需要將它運行在單獨的線程。但是如果我們要實現(xiàn)復(fù)雜的邏輯,用很長一段時間去處理,我們就必須采取創(chuàng)建一個新線程去執(zhí)行,否則在主線程上運行服務(wù),可能會導(dǎo)致ANR問題。

1、服務(wù)用途

服務(wù)適合兩種用途:

  • 實現(xiàn)多任務(wù)
  • 激活 Inter-Process-Communication (IPC) 流程間通訊

第一種情況的典型的例子是: 需要從遠程服務(wù)器下載數(shù)據(jù),在這種情況下,我們可以讓應(yīng)用同時與用戶進行交互,并在后臺開始完成工作,而用戶可以繼續(xù)使用應(yīng)用程序,當服務(wù)完成后發(fā)送一個消息給用戶。

在第二種情況下,我們可以通過服務(wù)“共享”一些常用的功能,使不同的應(yīng)用程序可以重用這些功能。例如,假設(shè)我們有一個發(fā)送電子郵件的服務(wù),我們希望在幾個應(yīng)用程序共享此服務(wù),這樣不必重寫相同的代碼。在這種情況下,我們可以使用IPC使服務(wù)公開,這個服務(wù)向“遠程”暴露接口,被其他應(yīng)用程序調(diào)用。

下面是一個簡單的服務(wù),繼承Service

2、繼承Service

public class TestService extends Service {

    @Override
    public IBinder onBind(Intent arg0) {       
        return null;
    }

}

服務(wù)是有生命周期的,可以實現(xiàn)其中一些回調(diào)方法:

public class TestService extends Service {

    @Override
    public void onCreate() {       
        super.onCreate();
    }

    @Override
    public void onDestroy() {       
        super.onDestroy();
    }


 
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {       
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public IBinder onBind(Intent arg0) {       
        return null;
    }

}

  只有服務(wù)被創(chuàng)建時,方法onCreate才會被唯一的調(diào)用一次。如果該服務(wù)已在運行這個方法將不會被調(diào)用。我們也不是直接調(diào)用它,操作系統(tǒng)OS調(diào)用這個方法。

  OnStartCommand是最重要的方法,因為它被調(diào)用的時候,我們需要啟動服務(wù)。在這個方法中,我們需要向我們運行的服務(wù)傳遞意圖,這樣我們就可以與服務(wù)交換一些信息。在這個方法中實現(xiàn)的邏輯可以直接在這個方法中被執(zhí)行,如果執(zhí)行很花費時間,我們就需要創(chuàng)建一個線程。正如你可以看到這個方法要求我們返回一個整數(shù)作為結(jié)果。此整數(shù)表示服務(wù)如何由操作系統(tǒng)來處理。

  • START_STICKY :使用這個返回值,如果OS殺死我們的服務(wù),它會重新創(chuàng)建它,但是發(fā)往該服務(wù)的意圖Intent不會再被傳遞,這種方式下服務(wù)總是在運行。
  • START_NOT_STICKY: 如果OS殺死服務(wù),就不會再創(chuàng)建,直到客戶端顯式激活onStart 命令
  •  START_REDELIVER_INTENT: 它類似 START_STICKY,意圖也會被再傳遞給該服務(wù)。

OnDestroy是在服務(wù)銷毀時由操作系統(tǒng)調(diào)用。

服務(wù)需要在Manifest.xml 中配置:

<service android:name=".TestService" android:enabled="true"/>

3、啟動和停止服務(wù)

  正如我們所知道服務(wù)必須首先被啟動,并在完成它的任務(wù)后最終停止。我們可以從活動Activity啟動它,我們可以使用Intent傳遞給服務(wù)一些信息。假設(shè)我們有兩個按鈕,一個開始和一個停止服務(wù).

btnStart.setOnClickListener(new View.OnClickListener() {


 
    @Override
    public void onClick(View v) {
        Intent i = new Intent(MainActivity.this, TestService.class);
        i.putExtra("name", "SurvivingwithAndroid");       
        MainActivity.this.startService(i);       
    }
});


 
btnStop.setOnClickListener(new View.OnClickListener() {


 
    @Override
    public void onClick(View v) {
        Intent i = new Intent(MainActivity.this, TestService.class);
        MainActivity.this.stopService(i);
    }
});

運行效果如下:

 

IntentService

  正如我們前面提到的服務(wù)運行在主線程,所以我們在本服務(wù)執(zhí)行一些邏輯要非常小心。必須考慮到,如果這個邏輯是一個阻塞操作,或者需要較長的時間來完成,會導(dǎo)致一個ANR問題發(fā)生。在這種情況下,將邏輯轉(zhuǎn)移到一個單獨的線程,這意味著我們必須在onStartCommand方法創(chuàng)建線程并運行它。還有另一類稱為IntentService的衍生服務(wù),可以簡化這些操作。當我們不需要同時處理多個請求,這個類是有用的。這個類創(chuàng)建一個工作線程來處理不同的請求,

功能如下:

  • 創(chuàng)建一個分離線程來處理請求
  • 創(chuàng)建一個請求隊列然后傳遞一個Intent消息
  • 創(chuàng)建onStartCommand的缺省實現(xiàn)
  • 當所有請求被處理后停止服務(wù)
public class TestIntentService extends IntentService {

    public TestIntentService() {
        super("TestIntentService");       
    }

    @Override
    protected void onHandleIntent(Intent intent) {

    }

}

onHandleIntent里面我們實現(xiàn)了邏輯,而無需關(guān)心這作業(yè)需要半天或更長,因為這種方法在一個單獨的線程中運行。

4、自動啟動服務(wù)

  如果我們想在智能手機開機時啟動它,我們先創(chuàng)建一個廣播接收器,監(jiān)聽到這個事件,然后啟動該服務(wù)。

public class BootBroadcast extends BroadcastReceiver {

    @Override
    public void onReceive(Context ctx, Intent intent) {       
        ctx.startService(new Intent(ctx, TestService.class));

    }

}

 Manifest.xml中配置:

<receiver android:name=".BootBroadcast">   
    <intent-filter >
        <action android:name="android.intent.action.BOOT_COMPLETED"/>               
    </intent-filter>
</receiver>

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

相關(guān)文章

  • Afianl框架里面的FinalBitmap加載網(wǎng)絡(luò)圖片

    Afianl框架里面的FinalBitmap加載網(wǎng)絡(luò)圖片

    這篇文章主要介紹了Afianl框架里面的FinalBitmap加載網(wǎng)絡(luò)圖片的相關(guān)資料,需要的朋友可以參考下
    2015-07-07
  • Android中button實現(xiàn)onclicklistener事件的兩種方式

    Android中button實現(xiàn)onclicklistener事件的兩種方式

    本文介紹下Android中button實現(xiàn)onclicklistener事件的兩種方法,感興趣的朋友可以參考下
    2013-04-04
  • Android自定義星星評分控件

    Android自定義星星評分控件

    這篇文章主要為大家詳細介紹了Android自定義星星評分控件的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Android自定義輪播圖效果

    Android自定義輪播圖效果

    這篇文章主要為大家詳細介紹了Android自定義輪播圖效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • android 使用虛擬機安裝apk(圖文教程)

    android 使用虛擬機安裝apk(圖文教程)

    android 使用虛擬機安裝apk對一些新手朋友會很陌生,今天教大家使用使用虛擬機安裝apk文件,步驟很詳細,有需要的朋友可以參考下
    2012-12-12
  • Android中如何利用AIDL機制調(diào)用遠程服務(wù)

    Android中如何利用AIDL機制調(diào)用遠程服務(wù)

    這篇文章主要介紹了Android中如何利用AIDL機制調(diào)用遠程服務(wù)的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • Android浮動窗口實現(xiàn)原理及代碼實例

    Android浮動窗口實現(xiàn)原理及代碼實例

    這篇文章主要介紹了Android浮動窗口實現(xiàn)原理及代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Android監(jiān)聽系統(tǒng)來電并彈出提示窗口

    Android監(jiān)聽系統(tǒng)來電并彈出提示窗口

    本篇文章主要介紹了Android監(jiān)聽系統(tǒng)來電并彈出提示窗口,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Android開發(fā)常見問題總結(jié)

    Android開發(fā)常見問題總結(jié)

    這篇文章主要介紹了Android開發(fā)常見問題,總結(jié)分析了諸如界面設(shè)計、多媒體調(diào)用、圖片、動畫操作等開發(fā)中常見的問題解決方法與相關(guān)注意事項,需要的朋友可以參考下
    2016-08-08
  • Kotlin協(xié)程上下文與上下文元素深入理解

    Kotlin協(xié)程上下文與上下文元素深入理解

    協(xié)程上下文是一個有索引的Element實例集合,每個element在這個集合里有一個唯一的key;協(xié)程上下文包含用戶定義的一些數(shù)據(jù)集合,這些數(shù)據(jù)與協(xié)程密切相關(guān);協(xié)程上下文用于控制線程行為、協(xié)程的生命周期、異常以及調(diào)試
    2022-08-08

最新評論