Service在android应用中,比较常用到,例如在一个页面中,播放mp3时候,如果直接调用MediaPlayer,很容易造成卡死,尤其是在播放网络文件时候。
如何进行Activity与Service交互,
Activity中实现ServiceConnection接口
代码如下:
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
HDAudioService = ((HDAudioMediaPlayerService.MyBinder) service)
.getService();
}
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
if(null != HDAudioService) {
HDAudioService.onDestroy();
HDAudioService = null;
}
}
绑定Service时候,获取到对象的实例,解除绑定时候,销毁对象。
启动服务代码如下:
Intent intent = new Intent();
intent.putExtra("url", hdurlbean.get(0).getWorksUrl());
intent.putExtra("MSG",
HDAudioMediaPlayerService.PLAY_MSG);
intent.setClass(HDAudioDetailActivity.this,
HDAudioMediaPlayerService.class);
bindService(intent, HDAudioDetailActivity.this,
Context.BIND_AUTO_CREATE);
startService(intent); // 启动服务
bindService 执行onCreate方法,startService执行onCreate,onStart方法,按照代码顺序的话,先bind后start,startService只调用onStart方法。
Service需要做处理,在绑定时候及时返回当前对象实例,Activity才能获取到,具体代码如下:
private MyBinder binder = new MyBinder();
// 新建一个Binder对象用于提供给客户端
public class MyBinder extends Binder {
public HDAudioMediaPlayerService getService() {
return HDAudioMediaPlayerService.this;
}
}
@Override
public IBinder onBind(Intent arg0) {
IBinder result = null;
if (null == result)
result = binder;
return result;
}
这样通过binder类 获取MyBinder 的对象,然后获取HDAudioMediaPlayerService.this;传给activity。
由于在项目代码实现,就不上传代码了。