音乐播放器中Service的使用
2016-03-06 11:37
435 查看
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"/>
相关文章推荐
- 软件测试homework2
- javascript下兼容都有哪些
- POJ 3176 简单DP
- POJ 3176 简单DP
- PAT (Advanced Level) Practise 1031 Hello World for U (20)
- 怎样更好的设计你的REST API之基于REST架构的Web Service设计及REST框架实现
- jquery:has()选择器
- webservice之wsdl详解
- HDU 1418 抱歉
- 51nod 1015 水仙花数
- 2016寒假训练——尺取法
- 研究生毕业前要完成的事
- Effective Java 第一条:考虑用静态工厂方法替代构造器
- Hibernate注解
- iOS Xcode, 解决“Could not insert new outlet connection”的问题。
- javascript高级程序设计笔记-第十章(DOM)
- C语言实现使用静态数组来构造栈结构
- Java集合框架之概括
- #Android学习#Fragment简单切换及常用控件用法
- 《暗时间》读书笔记(三)