田海立@CSDN
2012-8-20
广播机制是Android系统中最常用的机制之一。顾名思义,广播就是广播发出者说‘这有事情发生了,所有听众都听着…’。这听众就是注册了的侦听者,所以我们印象中广播接收者都是要么在AndroidManifest.xml中申明,要么在程序中通过Context.registerReceiver()注册。其实Android的广播也是可以定向的,发给指定的对象,而接收者并不是上述的方式注册的。
笔者在研究AppWidget机制的时候,发现了疑问点:
AppWidgetProvider可以处理很多广播:AppWidgetManager.ACTION_APPWIDGET_UPDATE/ AppWidgetManager.ACTION_APPWIDGET_DELETED / AppWidgetManager.ACTION_APPWIDGET_ENABLED以及AppWidgetManager.ACTION_APPWIDGET_DISABLED。但是除了AppWidgetManager.ACTION_APPWIDGET_UPDATE有被显示地在AndroidManifest.xml申明外,其他的广播都没有被注册,而这些广播又确实是能够收到的。
研究了一番,发现:
AppWidget是通过AppWidgetManager.ACTION_APPWIDGET_UPDATE找到AppWidgetProvider的,这样找到AppWidgetProvider之后,也就获得了实现该AppWidgetProvider的packageName和className。而当需要通知AppWidgetProvider的时候,由于已经知道了其所在的package和具体哪个实现类,就可以组成ComponentName了,直接向该Component发送广播。这就相当于说,已经知道要发送给谁了,不管有没有注册,都要送达广播到他那。【想想,这不像是广播的行为了,不过确实是这样】
再跟踪Broadcast发送的实现[Context-> ContextImp -> ActivityManagerNative -> ActivityManagerService.broadcastIntent()-> broadcastIntentLocked()],发现确实是这样:如果intent中已经指定了Component,就把它组成Receiver,然后再跟已经注册的该广播的Receiver合并在一起,适时的给所有这些Receiver发送广播。
斯以为记,以备后查!
分享到:
相关推荐
首先,Android广播分为两种类型:系统广播和普通广播。系统广播是由Android系统发起的,例如设备关机、开机、电池电量低等。这些广播由系统自动发送,所有注册了相应意图过滤器的应用程序都可以接收到。普通广播则是...
"Android广播"这个主题深入讲解了如何在Android环境中运用广播机制,以及如何通过广播进行简单数据传输。在这个教程中,我们将探讨以下几个关键知识点: 1. **广播基础**: - **BroadcastReceiver**: 这是Android...
Android中的广播主要分为两种类型:标准广播和有序广播。 标准广播 完全异步的在广播 在广播发出后,所有的广播接收器几乎在同一时刻接受到这条广播信息。 特点:广播效率高、没有任何先后顺序、无法被拦截 5.3 ...
在Android系统中,Broadcast(广播)是一种非常重要的组件,它使得应用程序之间能够进行无定向的信息传递,即使这些应用并未直接相互交互。BroadcastReceiver(广播接收器)是Android四大组件之一,用于监听并接收...
这个压缩包文件"BroadcastTest29"可能包含了关于Android广播测试的代码示例或实验,旨在帮助开发者更深入地理解和使用广播机制。 广播在Android中的主要功能包括但不限于: 1. **系统广播**:系统在特定事件发生时...
在Android应用开发中,BroadcastReceiver(广播接收器)是系统服务的重要组成部分,它允许应用程序接收并响应系统或自定义广播事件。本主题将深入探讨在Android Studio中如何使用BroadcastReceiver,特别是关注`...
在`getIdentifier()`方法中返回的这个ID,用于系统内部管理和区分不同用户的数据,确保广播的定向传输。 ### 注册广播接收者的影响 - **启动顺序**:静态注册的广播接收者在系统启动时就会被激活,而动态注册的...
1. ADV_IND:可连接的非定向广播,设备既可以接收连接请求也可以发送扫描响应。 2. ADV_DIRECT_IND:可连接的定向广播,针对特定设备广播,其他设备无法连接。 3. ADV_SCAN_IND:可扫描的非定向广播,只能发送扫描...
主要文件可能包括MainActivity.java(用于展示推送消息的处理)、XGPushReceiver.java(接收推送消息的广播接收器)以及相关配置文件。 6. **优化与扩展** - **消息定制**:除了基本的通知推送,还可以自定义消息...
在Android应用开发中,消息推送是一项重要的功能,它能让用户即使在不打开应用的情况下也能收到新消息或通知。本文将详细介绍如何利用第三方推送服务——极光推送(JPush)来实现Android消息推送。 极光推送是专门...
在本项目中,我们主要探讨的是一个基于Android平台的聊天工具源码,它利用了百度云推送服务(Baidu Push)来实现即时消息传递。这个应用的开发旨在帮助开发者理解和学习如何将百度云推送集成到自己的Android应用中,...
在Android应用开发中,极光推送(JPush)是一个常见的第三方推送平台,它提供了丰富的API和SDK,便于集成到应用程序中。 【极光推送的主要功能】: 1. **单播**:向单个设备发送消息,适用于精准推送特定用户的通知...
在Android开发中,Intent是一个非常重要的组件,它用于在应用程序的不同组件之间传递消息,实现活动(Activity)、服务(Service)、广播接收器(BroadcastReceiver)以及Content Provider之间的通信。本篇文章将...
在Android开发中,四大组件分别是Activity、Service、BroadcastReceiver和ContentProvider。这四个基本组件构成了Android应用程序的核心部分。 - **Activity**:是应用中的一个屏幕,用户可以在其上与应用进行交互...
在Android应用开发中,消息推送是一项重要的功能,它能让应用在后台时也能向用户发送通知,提高用户互动性。小米推送是小米公司提供的一种服务,它允许开发者向安装了其应用的用户推送消息,无论应用是否处于运行...
SpringBoot WebSocket 实现发送广播、点对点消息和 Android 接收 SpringBoot 是一个流行的 Java 框架,提供了许多实用的功能,包括 WebSocket。WebSocket 是一种双向通信协议,允许客户端和服务器之间进行实时通信...
此外,还可能涵盖BroadcastReceiver,它是系统广播事件的监听器,用于在不同组件间进行无定向通信。 在这些章节的学习中,开发者不仅会掌握Android应用的基本构建块,还会了解如何有效地管理和协调各个组件,实现...
### Android WAPPush详解 #### 一、基本概念与应用场景 **WAPPush**是一种能够将特定站点或业务的链接通过短信形式发送到支持WAPPush功能手机的技术。这项技术的核心价值在于它能够极大地简化用户查找和访问所需...
在Android应用开发中,新闻消息推送是一项至关重要的功能,它能让用户即使在不打开应用程序的情况下也能接收到最新的资讯。本文将深入探讨如何在Android平台上实现新闻消息的推送机制,包括基本概念、工作原理以及...
4. **消息接收**:Android应用需要设置消息监听器,当收到推送消息时,应用会接收到广播,然后根据业务逻辑处理消息。 5. **离线消息**:即使设备离线,百度推送也能在设备重新上线时发送之前未送达的消息。 6. **...