andriod里的activity和service连接原理

最近要做音乐播放器,刚接触andriod开发,吧activity和service之间的关系搞懂了

IBinder

  • 跨进程调用
  • 可用于远程调用和进程内调用,拥有与远程对象的交互的协议,不直接实现,要从Binder派生

activity与service绑定

  • mainActivity使用MusicPlayerService(service)类的方法
  1. mainActivity类中需要定义
private ServiceConnection conn = new ServiceConnection() {//定义连接service
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
    //musicBinder是service自定义类对象,其有一个自定义方法叫getplayInfo,返回的还是service对象本身
        mediaPlayerService = ((MediaPlayerService.musicBinder) service).getPlayInfo();
    }
     @Override
        public void onServiceDisconnected(ComponentName name) {
            mediaPlayerService = null;
        }
}
  1. onStart()和onCreate()里定义
intent = new Intent(this, MediaPlayerService.class);
bindService(intent, conn,Context.BIND_AUTO_CREATE);
  1. service里面定义
public class MediaPlayerService extends Service{
    public MediaPlayerService(){
        musicBinder=new musicBinder();
    }
    //通过bind 返回一个IBinder对象,然后该对象调用里面的方法实现参数的传递,返回给onServiceConnected

    @Override
    public IBinder onBind(Intent intent) {//供客户端用来与服务通信
        return  musicBinder;
    }
    //自定义musicBinder类和其方法
    class musicBinder extends Binder{
        public MediaPlayerService getPlayInfo(){
            return MediaPlayerService.this;
            //返回service对象本身
        }
    }
}
  1. 总结一下流程
activity和services绑定流程:(bindService方式)

1. new intent指定和哪个service绑定

2.开始绑定,传递服务连接处理函数ServiceConnection()(有点像回调函数),//调用此函数时android会调用service类中的onBind()函数。

3.onBind()函数里面返回了一个Binder子类对象。Binder子类中有个getPlayerInfo()方法,返回service对象本身。,最终就是为了给Activiy返回service对象的引用。

4.Activity和service绑定成功后。android会调用onServiceConnected()函数。此函数中IBinder就是service返回的Binder的子类对象MusicBinder.

5.调用MusicBinder中的方法getplayinfo()即可获得service对象的引用。

6.开始调用service中的公共方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值