android UI同service通信(方法一)

本文介绍了三种在Android中实现UI与Service通信的方法:1) 使用startService进行单向指令传递,适合频繁发送命令;2) 绑定Service,允许UI直接调用Service的public方法;3) 通过广播实现双向交流,UI和Service可互相发送消息。在Service结束时记得注销广播接收器。

例如UI向service发通知:(intent)

1.使用startService实现单向指令:UI----->Service:

这种方法适用于UI频繁向service发送命令。startService的调用次数在service里不会累积,可以放心大胆的多用,因此结束service只需一个stopService即可。

UI线程:

startService(new Intent("com.qylk.service.command").putExtra("key",value));//"com.qylk.service.command"需要在menifest.xml的service里公开声明。

Service线程:

在重写onStartCommand方法里,判断command,再做出相应的操作

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

Bundle bundle = intent.getExtras();

if (bundle == null)     return START_NOT_STICKY;   //service非粘滞

COMMAND command = (COMMAND) bundle.getSerializable("com"); //COMMAND 是个自定义的enum

switch (command) {

case COMMAND1:

//TODO

break;

case COMMAND2:

//TODO

break;

default:

break;

}

}

2.使用bindservice将service绑定到UI

这样UI就可以随便调用service里的public函数了,当activity销毁时,自动结束service,当然混合使用startservice和bindservice情况复杂一些,需见另一篇日志:

http://www.qylk.blog.163.com/blog/static/134687356201232375823/

代码不写了,google吧。


3。使用广播实现双向交流:UI<----->Service:

UI线程:

  Intent intent=new Intent();
  intent.putExtra("cn.itcast.audio.action",action);//“cn.itcast.audio.action”为键值名,自己定义即可,action为键值
  intent.putExtra("cn.itcast.audio.value",index);
  intent.setAction("android.intent.qylk.service");//服务的过滤地址,指明它发往哪儿

 sendBroadcast(intent);//开始广播

Service线程:

在oncreate()里先注册接收器:

   receiver=new MyReceiver();//新建接收器

   IntentFilter filter=new IntentFilter("android.intent.qylk.service");

   registerReceiver(receiver,filter);//注册这个接收器

接收器的类:

public class MyReceiver extends BroadcastReceiver {

  @Override
  public void onReceive(Context context, Intent intent) {
   Bundle bundle=intent.getExtras();
   byte action=bundle.getByte("cn.itcast.audio.action");//根据键名,取出键值
   int value=bundle.getInt("cn.itcast.audio.value");
   //TODO

   }}}

别忘了,在service结束时注销这个接收器:

unregisterReceiver(receiver);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值