Android中Activity与Service通信——Broadcast、Receiver、Intent、Bundle
来源:互联网 发布:手机淘宝的旺旺号在哪 编辑:程序博客网 时间:2024/05/21 17:13
有些事情一直强调,一直不去遵守,到了某个时候,结果它自己成为了习惯。很不明白,就像小时候那么爱玩台球,怎么给自己施加压力还是不行;后来迷上了电脑、网络,居然就把台球给忽略了,想好好读书,还是天天跑网吧;到了大学有自己的电脑居然没怎么去过网吧了;真是奇怪的事情;O(∩_∩)O~什么时候记录这事情也能成为一种习惯,每当做完一些事情的时候就写,而不是总是找借口忙啊忙的......
今天主要说明的是Activity(或者其中的View,通过传递Context即可)怎么与Service不断地交互信息;如果只是一开始的传递数据,完全可以通过在创建Service前通过Intent配合Bundle传递;如果需要来回交换一些状态信息或者动作命令(Action),则可以利用Broadcast和Receiver来实现。
今天主要说明的是Activity(或者其中的View,通过传递Context即可)怎么与Service不断地交互信息;如果只是一开始的传递数据,完全可以通过在创建Service前通过Intent配合Bundle传递;如果需要来回交换一些状态信息或者动作命令(Action),则可以利用Broadcast和Receiver来实现。
Activity和Service都有自己的生命周期,当Activity退出时,Service仍可以在后台默默服务。这里就简单介绍一个例子,Activity通过按钮点击发送不同的动作命令给Service执行。而Service再通过广播返回信息类似。
在Activity的代码中,可以有如下语句:
1.首先是创建Service
Intent i = new Intent(this, MyService.class);i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);i.putExtra("RunFlag", mbRunFlag);startService(i);如果从Activity传递的是简单数据类型,Intent中提供的非常全,如果是自定义类,可以通过Bundle来实现,下面有用到。其中,MyService继承自Service,里面实现了onStart()时所做的接收工作如下:
@Override public void onStart(Intent intent, int startId) { // TODO Auto-generated method stub mbRunFlag = intent.getLongExtra("RunFlag", mbRunFlag); IntentFilter filter = new IntentFilter(SERVICE_COMMAND); //下面是开启的对广播的接收处理工作 mReceiver = new MyServiceReceiver(); registerReceiver(mReceiver,filter); super.onStart(intent, startId); Log.i("MyService", "MyService Start!"); }2.当需要在运行中通过按钮等事件触发传递命令,使Service执行某些动作(Action)时,可以自定义类;这里首先是有个AbstractServiceCommand,实现了Serializable接口,各种具体命令继承即可,那么发送广播如下即可:其中的SERVICE_COMMAND是自定义的字符串,用于区分广播的或者传递的数据等;
SetRunFlagServiceCommand setRunFlagCmd= new SetRunFlagServiceCommand();setRunFlagCmd.setRunFlag(mbRunFlag);sendServiceCmd(setRunFlagCmd);Log.i(CLASS_TAG,setRunFlagCmd.printContent());
protected void sendServiceCmd(AbstractServiceCommand cmd) { // TODO Auto-generated method stub Bundle bundle = new Bundle(); bundle.putSerializable(SERVICE_COMMAND, cmd); Intent i = new Intent(SERVICE_COMMAND); i.putExtras(bundle); sendBroadcast(i);}3.实现接收
public class MyServiceReceiver extends BroadcastReceiver {public boolean mbRunFlagReceiver = false;@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubBundle bundle = intent.getExtras();AbstractServiceCommand serviceCmd = (AbstractServiceCommand) bundle.getSerializable(SERVICE_COMMAND);serviceCmd.executeCommand();Log.i(SERVICE_COMMAND,serviceCmd.printContent());}}最后是记得因为在Onstart()中注册了接收广播,用SERVICE_COMMAND作为过滤符;那在Service销毁时,要unregisterReceiver(mReceiver);
- Android中Activity与Service通信——Broadcast、Receiver、Intent、Bundle
- Android中Activity与Service通信——Broadcast、Receiver、Intent、Bundle
- android 组件(activity,service,content provider,broadcast receiver,intent)详解
- Activity、Broadcast Intent Receiver、Service、Content Provider
- Intent、Broadcast Receiver、service
- Android Activity& service&Broadcast receiver 生命周期
- service,broadcast与activity 通信
- Android中有四大组件activity、service、content provider、broadcast receiver
- Activity与Service交互之Broadcast Receiver篇
- (转)Android:Activity/Service/Broadcast Receiver/Content Provider
- Android有四大组件:Activity、Service、Broadcast Receiver、Content Provider。
- Android四大组件:Activity、Service、Broadcast Receiver、Content Provider
- android四大组件(总结)activity、service、content provider、broadcast receiver
- Android的四大组件:Activity、Service、Content Provider、Broadcast Receiver
- Android——Broadcast Receiver
- 使用BroadCast使Activity与Service通信
- intent 和 Broadcast Receiver之间的通信
- Intent、Bundle——实现Activity之间的通信
- 用VS2010建立web三层以上架构的解决方案
- .Net线程问题解答
- iOS框架介绍(四)---媒体层
- 关于NoSQL,你必须知道的九件事
- 基于Jquery+Ajax+Json+高效分页
- Android中Activity与Service通信——Broadcast、Receiver、Intent、Bundle
- eXtremeComponents使用总结--2(转载)
- iPhone官方SDK用于读写临时数据的方法
- 关于HTC g12 root
- Block devices and block sizes
- 黑马程序员:判断一个路径是否是目录
- web工程下 tomcat 上传大文件 内存溢出问题解决
- Java中所常用术语解释大全
- 【网络流】网络流复习