溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

安卓中Service組件怎么用

發(fā)布時間:2021-11-22 15:20:18 來源:億速云 閱讀:115 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹安卓中Service組件怎么用,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

1:Service的創(chuàng)建

Service就是服務(wù)的意思,它的特點(diǎn)就是當(dāng)你開啟服務(wù)以后即使你關(guān)閉app它也在運(yùn)行,直到調(diào)用停止服務(wù)的方法。典型的用法就是音樂播放器。

Service的創(chuàng)建同Activity一樣最好不要自己繼承寫類。創(chuàng)建方法為自己項(xiàng)目右鍵->new->other->Android Object->然后一直下一步就可以了(中間有取類名可以自行更改)

2:Service的生命周期

安卓中Service組件怎么用

Service的生命周期有2種一種是開啟服務(wù)和綁定服務(wù)。大家看上圖就可以一目了然。

3:啟動和綁定服務(wù)以及關(guān)閉服務(wù)

首先是第一種啟動服務(wù),使用一個按鈕并在其監(jiān)聽事件里啟動服務(wù),代碼如下

//第一個按鍵啟動服務(wù)
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        service = new Intent();
        //設(shè)置跳轉(zhuǎn)到的服務(wù)
        service.setClass(MainActivity.this, MyService.class);
        //啟動服務(wù)
        startService(service );
    }
});
//第二個按鍵關(guān)閉服務(wù)
findViewById(R.id.button2).setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        stopService(service);
    }
});

當(dāng)啟動服務(wù)以后如果在啟動只會調(diào)用onStartCommand方法,不會再新建一個服務(wù)對象(構(gòu)造方法只執(zhí)行一次)。如下圖所示

安卓中Service組件怎么用正常的啟動結(jié)束服務(wù)打的日志圖如下(被水印遮住了蛋疼。。我源代碼會上傳大家可以自己驗(yàn)證)

安卓中Service組件怎么用

然后是第二種綁定服務(wù),方法跟上面類似,代碼如下

//第三個按鍵綁定服務(wù)
findViewById(R.id.button3).setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        service = new Intent();
        //設(shè)置跳轉(zhuǎn)到的服務(wù)
            service.setClass(MainActivity.this, MyService.class);
            //啟動服務(wù)
        bindService(service, null, Context.BIND_AUTO_CREATE);
    }
});
//第四個按鍵解綁服務(wù)
findViewById(R.id.button4).setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        unbindService(null);
    }
});

綁定服務(wù)方法的運(yùn)行順序如下(如生命周期所示)

安卓中Service組件怎么用

4:動態(tài)的訪問Service的方法

剛才我啟動綁定服務(wù)方法時候中間那個參數(shù)為null,現(xiàn)在我們來為它傳入一個參數(shù)(由于要傳入的對象是一個接口所以必須重寫它的方法)

private ServiceConnection conn = new ServiceConnection() {
                                                                                                                                                                                                                           
    @Override
    public void onServiceDisconnected(ComponentName name) {
                                                                                                                                                                                                                               
    }
                                                                                                                                                                                                                           
    @Override
    public void onServiceConnected(ComponentName name, IBinder service)   {
                                                                                                                                                                                                                         
    }
};
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
                                                                                                                                                                                                                             
    @Override
    public void onClick(View v) {
        Intent service = new Intent(MainActivity.this, MyService.class);
        bindService(service , conn , Context.BIND_AUTO_CREATE);
    }
});

回到Service的代碼頁面,在Service中寫一個play方法并打日志以便我們觀看結(jié)果,然后寫一個內(nèi)部類繼承binder并寫一個方法來調(diào)用Service的play()方法,最后在onbind方法返回一個binder對象

@Override
public IBinder onBind(Intent intent) {
    return new MyBinder();
}
                                                                                                                           
class MyBinder extends Binder
{
    public void start()
    {
        play();
    }
}
                                                                                                                           
public void play()
{
    Log.e("MyService", "play()");
}

在回到Activity代碼,在conn接口中的onServiceConnected()方法中獲取Mybinder對象,在調(diào)用對象的start()方法,代碼如下

private ServiceConnection conn = new ServiceConnection() {
                                                         
    @Override
    public void onServiceDisconnected(ComponentName name) {
                                                             
    }
                                                         
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        //獲取Service中的Mybinder的對象
        MyBinder binder = (MyBinder) service;
        //調(diào)用Mybinder中的方法,里面就包含了Service中的方法
        binder.start();
                                                         
};

大功告成。日志打印結(jié)果如下

安卓中Service組件怎么用

以上是“安卓中Service組件怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI