Android學習——Service(二)

今天來介紹Service的第二種使用方式,Bind方式ide

 

Bind方式啓動服務


Bind方式和Start方式啓動很相似,都是經過Intent來啓動,不一樣的是,Bind方式須要傳入三個參數,以下:函數

Intent intent2 =new Intent(MainActivity.this,BindService.class);
bindService(intent2,conn,BIND_AUTO_CREATE);

其中conn爲一個ServiceConnection對象,用於獲取以Bind方式綁定的Service對象,其包含兩個抽象函數,以下:this

conn=new ServiceConnection()
        {
            @Override
            public void onServiceConnected(ComponentName name, IBinder service)
            {
                bindservice=((BindService.MyBinder)service).getService();
            }

            @Override
            public void onServiceDisconnected(ComponentName name)
            {

            }
        };

其中的onServiceDisconnected爲當Service的綁定意外丟失時會調用,在該例中沒有用到。spa

其中onServiceConnected爲當ServiceConnextion對象和Service成功綁定時回調用的方法,其中的IBinder參數正是在Service中的onBind方法的返回值類型。故咱們只須要在Service中,新建一個IBinder的子類,獲取Service對象便可。code

 

在Service中建立IBinder接口


public class BindService extends Service
{
    public class MyBinder extends Binder
    {
        public BindService getService()
        {
            return BindService.this;
        }
    }
    @Nullable
    @Override
    public IBinder onBind(Intent intent)
    {
        Log.d("Jinx","Bind");
        return new MyBinder();
    }

如上所示便可,其中Binder爲IBinder的一個子類,咱們的內部類繼承Binder便可。對象

 

在Activity獲取Service中的方法


在經過conn進行關聯後,即可以方便地在Activity中調用Service中的方法,以下代碼虛擬了一個音樂播放器爲例:blog

Service中:繼承

public void Play()
    {
        Log.d("Jinx","Play");
    }
    public void Pause()
    {
        Log.d("Jinx","Pause");
    }

 

Activity中:接口

case R.id.play_bt:
                bindservice.Play();
                break;
            case R.id.pause_bt:
                bindservice.Pause();
                break;
相關文章
相關標籤/搜索