Activity与Service交互

本文详细阐述了在Android应用中如何利用Service进行后台任务处理,特别是如何在Activity中通过ServiceConnection接口实现与Service的交互。重点介绍了启动Service的方法,包括bindService与startService的区别,并详细解释了Service的生命周期以及如何在绑定与解除绑定时正确地管理对象实例。通过实例代码展示了如何在Activity中启动并管理Service,确保应用在播放网络文件等复杂操作时不出现卡死现象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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、付费专栏及课程。

余额充值