`
Everyday都不同
  • 浏览: 723478 次
  • 性别: Icon_minigender_1
  • 来自: 宇宙
社区版块
存档分类
最新评论

Activity组件与Service组件通过BroadcastReceiver监听器通信

阅读更多

1.首先,Activity的onCreate方法中要有启动后台Service的Intent

Intent intent = new Intent(this, xxxService.class);
startService(intent);

 为了能在AndroidManifest.xml中注册Activity中的receiver(它是内部类形式),需要把其定义成static的

 

public static class MyServiceReceiver extends BroadcastReceiver { ...}

 注意,当把receiver定义成static时,就不能使用non-static的sendBroadcast(intent) 方法了,如果要在receiver中发送广播消息,只能在onCreate中通过代码的方式注册receiver

 

 

2.在清单文件中注册Activity以及其内部receiver

 <activity
            android:name=".activity.xxxActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
 </activity>

<receiver android:name=".activity.xxxActivity$MyServiceReceiver">
   <intent-filter>
       <action android:name="com.example.action.UPDATE_BROADCAST" />
   </intent-filter>            
</receiver>

 其中,使用xxxActivity$MyServiceReceiver即可注册被定义成内部类的receiver. 此receiver用于接收后台service的广播信息,并通知前台Activity对界面进行改变等操作(一般来说前台Activity会实现onClickListener接口,会在button的单击事件中就广播消息给后台Service)。

 

 

 3.在后台Serivce中定义一个内部类型的receiver,因为要在此receiver中使用Non-static的sendBroadcast方法,所以不能定义为static了,所以就只好在此service的onCreate方法里注册该receiver了

 

public  class MyActivityReceiver extends BroadcastReceiver {.....}

 

 

4.在sevice的onCreate方法中注册该receiver

receiver = new MyActivityReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("com.example.action.CTL_BROADCAST");
registerReceiver(receiver, filter);

 其中filter.addAction("com.example.action.CTL_BROADCAST");指定该后台SERVICE所能监听到的action为

 

com.example.action.CTL_BROADCAST的intent.

 

以及,在清单文件中注册该Service:

<service android:name=".service.MusicService" />

 

 

5.注意,一旦Activity和Service一通信,他们内部类BroadcastReceiver的onReceive方法里面的intent参数即为它本身能够监听到的intent

如Activity中内部类的onReceive方法中的intent, 即为action为com.example.action.UPDATE_BROADCAST的Intent,

<action android:name="com.example.action.UPDATE_BROADCAST" />指定前台Activity所能监听的Action,表明后台如果想要给前台广播信息,必须发送一个action为com.example.action.UPDATE_BROADCAST的Intent:

Intent intent = new Intent("com.example.action.UPDATE_BROADCAST");
intent.putExtras(String key, Object value);
sendBroadcast(intent);

 同理,后台Service也一样。

 

 

分享到:
评论

相关推荐

    Service与Activity的通信

    - **BroadcastReceiver**: 广播接收器是一种轻量级组件,可以监听系统或应用发出的广播事件。`Service`可以通过发送广播来通知`Activity`某些事件发生,`Activity`注册对应的`BroadcastReceiver`进行响应。 4. **...

    Android:Intent&Activity,Service,BroadcastReceiver

    在实际项目中,开发者需要灵活运用Intent进行页面跳转和数据传递,妥善管理Activity的生命周期以优化用户体验,使用Service处理后台任务,以及利用BroadcastReceiver监听系统或自定义广播事件,从而实现各种复杂的...

    activity service 数据交互

    在这个例子中,Service通过sendBroadcast()方法发送自定义广播,Activity通过BroadcastReceiver监听并处理数据。需要注意的是,为了防止内存泄漏,Activity在销毁时需要注销BroadcastReceiver。 总的来说,Activity...

    利用广播Broadcast Receiver,在2个不同的Activity传递数据

    这使得BroadcastReceiver成为在不同组件间通信的有效手段,包括Activity、Service等。 要实现两个Activity之间的数据传递,我们需要遵循以下步骤: 1. **创建BroadcastReceiver**: 首先,在需要发送数据的...

    Android Service与Activity交互

    Service组件可以通过startService()或bindService()方法启动。在这个例子中,我们可能会使用startService(),因为Service将独立于Activity运行,即使Activity被销毁,Service依然会继续执行。 Service内部,我们将...

    Android四大组件简述

    Android系统的核心架构主要由四大组件构成:Activity、Service、BroadcastReceiver和ContentProvider。这四大组件是构建Android应用程序的基础,理解并熟练运用它们是每个Android开发者必须掌握的关键技能。 首先,...

    实验四-Android基本组件交互实验.doc

    例如,通过Intent实现Activity间的跳转和数据传递,使用Service处理长时间运行的任务,以及通过BroadcastReceiver监听系统事件,如短信接收,然后做出相应的响应,如启动新的Activity。 在实际应用中,理解并灵活...

    Android实现Activity、Service与Broadcaster三大组件之间互相调用的方法详解

    在Android应用开发中,Activity、Service和BroadcastReceiver是三大核心组件,它们之间的通信是构建高效、稳定应用的基础。本篇文章将详细讲解如何在Android中实现这三大组件之间的互相调用,以及相关的实现原理和...

    BroadcastReceiver

    在实际开发中,BroadcastReceiver可以结合其他组件,如Service和Activity,形成复杂的交互。例如,一个BroadcastReceiver可能在接收到新消息的通知后启动一个Service来处理消息内容,或者更新Activity的状态。 标签...

    android service 通过broadcast通知activity.zip

    当Service需要与Activity进行通信时,可以使用BroadcastReceiver(广播接收器)这一机制。本资料“android service 通过broadcast通知activity.zip”显然是关于如何在Service和Activity之间通过Broadcast进行通信的...

    BroadcastReceiver通过接口回调更新界面

    在Android开发中,BroadcastReceiver(广播接收器)是一种非常重要的组件,它用于监听系统或应用程序广播事件,并在接收到特定广播后执行相应的操作。在标题"BroadcastReceiver通过接口回调更新界面"中,我们关注的...

    不同应用的activity进程间通信demo

    Intent是Android中最常见的组件间通信方式,它能启动一个新的Activity或者Service。在不同应用之间使用Intent进行通信时,我们需要设置Intent的FLAG_ACTIVITY_NEW_TASK标志,并指定待启动应用的ComponentName。例如...

    BroadCastReceiver

    在实际开发中,`BroadcastReceiver`常常与其他组件如`Service`、`Activity`结合使用,以实现更复杂的业务逻辑。例如,当接收到开机广播时启动一个服务,或者在接收到特定广播时更新UI。 为了优化性能和用户体验,应...

    3-ANDROID 四大组件.zip

    - Content Provider可以被Activity、Service甚至BroadcastReceiver用来读写数据,实现了数据的跨组件共享。 理解并熟练掌握Android的四大组件对于开发高效、稳定的应用至关重要。开发者需要根据具体需求灵活运用,...

    安卓四大组件练习

    例如,Activity可以启动Service来执行后台任务,同时通过BroadcastReceiver监听Service的状态变化;ContentProvider则可以为多个Activity或Service提供统一的数据接口。了解和熟练掌握这四大组件的用法,对于安卓...

    Service向Activity传值(java)

    在Android应用开发中,`Service`和`Activity`是两个重要的组件。`Service`用于在后台执行长时间运行的任务,而`Activity`则负责用户界面交互。有时,我们可能需要在`Service`中处理某些数据,并将这些数据传递给`...

    Android四大基本组件介绍与生命周期

    Android 应用开发的核心在于四大基本组件:Activity、Service、Content Provider 和 BroadcastReceiver。这四个组件各自承担着不同的职责,共同构建了Android应用的基石。 1. **Activity**:Activity 是用户界面的...

    Andorid组件使用的示例源码

    Android的主要组件包括四大组件:Activity、Service、BroadcastReceiver以及ContentProvider。这些组件各自承担着不同的职责,为开发者提供了灵活且强大的功能。 1. **Activity**:Activity是用户界面的入口,代表...

    初中级Android开发社招面试之Service及BroadcastReceiver.zip

    在Android应用开发中,Service和BroadcastReceiver是两个至关重要的组件,它们在应用程序的后台运行和服务交互中起到关键作用。这份资料“初中级Android开发社招面试之Service及BroadcastReceiver”显然是针对想要...

    安卓后台服务相关-Service意外被kill利用监听来重新启动.rar

    1. Service是Android四大组件(Activity、Service、BroadcastReceiver、ContentProvider)之一,通常用于在后台执行任务,如播放音乐、网络通信等。 2. Service生命周期包含onCreate()、onStartCommand()、onBind()...

Global site tag (gtag.js) - Google Analytics