Service学习之--------绑定服务

1、前面两章我介绍了服务的生命周期和在服务里面注册广播的好处。那么现在我们改学习一下如何进行绑定服务。


2、之所以要进行绑定服务,原因是我们想使用服务里面的方法。比如我们的服务如果是一个音乐服务,音乐服务里面有暂停音乐的播放。那么怎么调这个方法呢??难道是直接new这个Service么???那么不就是直接new 对象调方法么。那我们启动服务。。。。这个原因我忘了。。。。


3、那么如何进行绑定服务呢?需要三个东西,一个是服务、一个调用的界面、一个抽取的接口

特殊介绍:这个抽取的接口是编码习惯抽取出来的,就是你把你这个开启服务的想要调的所有的方法都放在这个接口里面,然后再服务里面去实现,最后再界面里面去调用这些方法。


4、以下是一个微型音乐播放器的绑定服务:

抽取的接口:

public interface Imusic {
	public void callPlay();
	public void callPause();
	public void callResume();
}

服务:

public class MusicService extends Service {

	@Override
	public IBinder onBind(Intent intent) {
		//代理人对象返回
		System.out.println("onBind");
		return new MyBinder();
	}

	@Override
	public void onCreate() {
		super.onCreate();
		// 初始播放器
	}

	public void play() {
		System.out.println("音乐响起来了,太好听,你听到了吗");
	}

	public void pause() {
		System.out.println("音乐暂时停下来了,好可惜啊");
	}

	public void resume() {
		System.out.println("音乐又响起来,简直是天籁之音");
	}

	// 创建代理人对象
	class MyBinder extends Binder implements Imusic {

		@Override
		public void callPlay() {
			play();

		}

		@Override
		public void callPause() {
			pause();

		}

		@Override
		public void callResume() {
			resume();

		}

	}
}

 界面调用:

public class MainActivity extends Activity {

	private MyServiceConn conn;
	private Imusic imusic;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		
		//当界面创建的时候 就去开启服务 绑定服务
		Intent service=new Intent();
		service.setClass(this, MusicService.class);
		//开启服务
		startService(service);
		//绑定服务
		
		conn = new MyServiceConn();
		bindService(service, conn, BIND_AUTO_CREATE);
		
	}

	//播放
	public void click(View v){
		imusic.callPlay();
	}
	//暂停
	public void click1(View v){
		imusic.callPause();
	}
	//继续播放
	public void click2(View v){
		imusic.callResume();
	}
	
	@Override
	protected void onDestroy() {
		super.onDestroy();
		//当activity销毁的时候
		//解除绑定
		unbindService(conn);
	}
	
	class MyServiceConn implements ServiceConnection{

		

		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			imusic = (Imusic) service;
		}

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值