Activity与Service交互

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。

由于在项目代码实现,就不上传代码了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值