音乐播放器中Service的使用

1、Android中常用的Service

第一种是startService(),第二种是bindService()。
这两种的区别?
startService本身的设计上不利于交互,它的参数和使用startActivity时很相似,仅仅两个参数,第一个参数是intent,第二个参数是启动哪个Service。一旦启动了service就像是跟service说去完成这件事,就没有其他的交互了。对于音乐播放器这种让service去播放音乐,暂停,下一曲,上一曲这些都需要和service交互,显然使用startService是不太合适的。
bindService在设计上就很适合用于音乐播放器这种需要交互的情况下。因为它会提供一个接口给Activity,通过这个接口IBinder可以去控制service的行为。

2、使用方法:

service中最重要的部分是通过onBind()这个函数返回一个接口IBinder。

    @Override
    public IBinder onBind(Intent intent) {
        //这个MyBinder类是继承Binder类所写的,在该类中可以写自己的业务逻辑函数
        myIBinder = new MyBinder();
        Bundle bundle = intent.getExtras();
        serviceMusicList=(ArrayList)bundle.getSerializable("musiclist");
        return myIBinder;
    }
    class MyBinder extends Binder{
    public void play()
    {
        //
    }
    }

Activity这边启动bindService的方法。
bindService()有三个参数,第一个是一个intent,第二个是ServiceConnection,这个对象需要自己去实现一些接口,这里使用的是在onServiceConnected()中获得Service的接口IBinder,强转成MyBinder便可使用其中的方法,间接控制service。第三个参数通常写BIND_AUTO_CREATE,官方文档的说明是 automatically create the service as long as the binding exists意思是当绑定它的activity还存在service就存在。

bindService(Intent service,ServiceConnection conn,int flags)
        //初始化服务,从服务获取到一个IBinder接口,从而控制服务端的业务逻辑
        public void initservice()
        {
            Intent service =new Intent(this,MusicService.class);
            Bundle musiclistBundle = new Bundle();
            musiclistBundle.putSerializable("musiclist", musiclist);
            service.putExtras(musiclistBundle);
            ServiceConnection conn = new ServiceConnection() {

                @Override
                public void onServiceDisconnected(ComponentName name) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onServiceConnected(ComponentName name, IBinder service) {
                    // TODO Auto-generated method stub
                    musicManager = (MyBinder) service;
                }
            };
            bindService(service, conn, Service.BIND_AUTO_CREATE);
        }

3、注册service

这个步骤比较容易忽略,而且比较难排查,编译器不会报错,但是运行时会有问题。
注册方法,在AndroidManifest.xml文件中application标签内写如

<service  android:name = ".MusicService"/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值