当前位置: 代码迷 >> 综合 >> Service学习之--------绑定服务
  详细解决方案

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

热度:58   发布时间:2023-10-15 10:45:00.0

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


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


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

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


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

抽取的接口:

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

服务:

public class MusicService extends Service {@Overridepublic IBinder onBind(Intent intent) {//代理人对象返回System.out.println("onBind");return new MyBinder();}@Overridepublic 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 {@Overridepublic void callPlay() {play();}@Overridepublic void callPause() {pause();}@Overridepublic void callResume() {resume();}}
}

 界面调用:

public class MainActivity extends Activity {private MyServiceConn conn;private Imusic imusic;@Overrideprotected 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();}@Overrideprotected void onDestroy() {super.onDestroy();//当activity销毁的时候//解除绑定unbindService(conn);}class MyServiceConn implements ServiceConnection{@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {imusic = (Imusic) service;}@Overridepublic void onServiceDisconnected(ComponentName name) {// TODO Auto-generated method stub}}
}


  相关解决方案