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;
相关文章
相关标签/搜索