有些事情一直强调,一直不去遵守,到了某个时候,结果它自己成为了习惯。很不明白,就像小时候那么爱玩台球,怎么给自己施加压力还是不行;后来迷上了电脑、网络,居然就把台球给忽略了,想好好读书,还是天天跑网吧;到了大学有自己的电脑居然没怎么去过网吧了;真是奇怪的事情;O(∩_∩)O~什么时候记录这事情也能成为一种习惯,每当做完一些事情的时候就写,而不是总是找借口忙啊忙的......
今天主要说明的是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;
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Bundle bundle = intent.getExtras();
AbstractServiceCommand serviceCmd = (AbstractServiceCommand) bundle.getSerializable(SERVICE_COMMAND);
serviceCmd.executeCommand();
Log.i(SERVICE_COMMAND,serviceCmd.printContent());
}
}
最后是记得因为在Onstart()中注册了接收广播,用SERVICE_COMMAND作为过滤符;那在Service销毁时,要unregisterReceiver(mReceiver);
分享到:
相关推荐
总结,BroadcastReceiver是Android系统中实现组件间通信的重要工具,特别适用于在Activity之间传递数据。通过创建BroadcastReceiver,注册它,发送Broadcast,以及在接收端处理数据,我们可以轻松地在两个不同的...
它被用来启动活动(Activity)、服务(Service)或者广播接收器(Broadcast Receiver),并且可以传递数据和执行动作。本篇文章将详细解析Intent的用法。 首先,Intent分为显式Intent和隐式Intent两种类型。显式...
Intent 可用于启动活动(Activity)、服务(Service),传递数据,甚至启动广播接收器(Broadcast Receiver)。本压缩包文件“安卓Android源码——Intent1.rar”很可能包含了有关Intent的源代码分析和示例,帮助...
例如,在BroadcastService中,Service可以通过BroadcastReceiver广播消息,Activity注册该Receiver并监听特定事件,从而实现数据交换。 5. **LocalBroadcastManager**: 对于应用内部通信,LocalBroadcastManager...
在Android开发中,Activity、Bundle、请求码与结果码、Intent、广播以及服务是核心组件,它们构成了Android应用的基础架构。接下来,我们将深入探讨这些概念及其应用。 首先,Activity是Android应用程序的基本单元...
然而,Service与Activity之间的通信是必不可少的,特别是在Service需要向Activity传递数据的情况下。本教程将详细讲解如何在Service中传递数据给Activity。 首先,我们需要理解Android中的绑定服务(Bound Service...
它被用来启动活动(Activity)、服务(Service)或者广播接收器(Broadcast Receiver),并且可以传递数据和执行动作。本篇文章将详细解析“Intent系统调用示例”,并结合提供的IntentDemo项目进行深入探讨。 1. **...
主要的四种跨进程通信方式包括:Activity、Content Provider、Broadcast Receiver以及Service,特别是AIDL(Android Interface Definition Language)服务。 1. **访问其他应用程序的Activity** - 在同一应用内...
在Android开发中,Intent是一种非常重要的组件,它用于在应用程序的不同组件之间传递消息,实现活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)以及内容提供者(Content Provider)之间的交互...
在Android开发中,Intent是一种非常重要的组件,它用于在应用程序的不同组件之间传递消息,实现活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)以及内容提供者(Content Provider)之间的交互...
Intent类在Android开发中扮演着至关重要的角色,它是应用程序间通信(IPC)的主要方式,用于启动活动、服务或者传递数据。本教程将深入探讨Intent类的一些核心成员变量,帮助开发者更好地理解和利用Intent来构建功能...
在Android开发中,广播(Broadcast)是一种非常重要的组件,它允许应用程序之间进行异步通信,无需两者之间有明确的依赖关系。在这个“android开发 广播实现Activity”中,我们将探讨如何利用广播来实现在不同...
在Android系统中,Broadcast(广播)是一种非常重要的组件,它允许应用程序之间进行异步通信,无需两者之间有明确的依赖关系。BroadcastReceiver(广播接收器)是广播机制的核心,它可以监听系统或应用发送的广播...
在Android应用开发中,计时器是一个非常关键的组件,常用于执行周期性的任务或者实现倒计时功能。本实例将深入探讨如何利用Service和BroadcastReceiver来实现在后台运行的计时器,并同步更新UI。Service是Android...
在Android开发中,Broadcast(广播)是一种非常重要的组件,它使得应用程序之间能够相互通信,即使这些应用在后台运行或者完全未启动。Android Studio 4.2.2 提供了便利的方式来创建和管理Broadcast。本篇文章将深入...
Intent的主要功能包括启动Activity、启动Service、传递数据以及实现Broadcast Receiver的通信。在这个"安卓实验4intent"中,我们将深入探讨Intent的显式启动方式。 1. 显式Intent启动: 显式Intent是通过指定目标...
在Android应用开发中,Intent是连接各个组件的重要桥梁,它用于启动活动(Activity)、服务(Service)或广播接收器(Broadcast Receiver)。当我们想要调用系统相机功能时,Intent扮演了关键角色。本教程将深入讲解...
Intent是Android中用来调用其它组件的类,通过Intent,我们可以非常方便的调用Activity,Broadcast Receiver和Service。 Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse...
在本文中,我们将重点关注Activity、Service和Broadcast Receiver的交互,它们构成了Android组件通信的基础。 ### Activity的交互 Activity是用户界面的主要载体,用于展示用户可以直接交互的视图。Activity之间的...
4. **Android Framework**:这部分包括了Android应用程序框架,如Activity Manager、Content Provider、Intent、Broadcast Receiver等,它们构成了Android应用开发的基础。 5. **Libraries**:一系列的C/C++库,如...