
Android基础知识——详解广播机制
创建继承BroadcastReceiver的类,实现onReceive()方法。 创建IntentFilter实例,添加要接收的广播信息。 注册广播接收器,防止内存泄漏需在 OnDestroy()中注销。 创建Intent实例并设置包名。 调用sendBroadcast()方法。 获取LocalBroadcastManager实例。 发送本地广播,注册和注销广播接收器。 优先级设置:在intent-filter中设置priority属性,数值越高优先级越高。 截断机制:在onReceive()中调用abortBroadcast()方法截断当前广播。 本地广播仅在程序启动后发送和接收,静态注册广播在本地广播中无效。 避免在onReceive()中执行耗时操作,若启动服务或访问网络需谨慎处理。
发布日期:2021-05-19 15:52:47
浏览次数:20
分类:精选文章
本文共 3318 字,大约阅读时间需要 11 分钟。
广播机制简介
当Android手机的状态发生变化时,系统会发送广播。开发者可以自定义广播接收器接受特定广播,并执行相应的逻辑代码。例如,当手机电量低于15%时,提示用户进入省电模式。此外,开发者也可以自定义发送广播。
广播类型
广播主要分为标准广播和有序广播两种类型。
标准广播:全异步执行,所有广播接收器同时接收广播,无先后顺序,广播不能被截断。
有序广播:同步执行,同一时间仅有一个广播接收器接收广播,前一个广播接收器可以截断正在传递的广播。
接收系统广播
注册广播方式有动态注册和静态注册两种。
动态注册广播
步骤:
示例代码:
public class MainActivity extends AppCompatActivity { private MyBroadcastReceiver mReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { IntentFilter filter = new IntentFilter(); filter.addAction("你的自定义广播内容"); mReceiver = new MyBroadcastReceiver(); registerReceiver(mReceiver, filter); } }); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(mReceiver); } class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 接收到广播逻辑处理 } }}
静态注册广播
适用于程序启动前注册广播,步骤包括创建广播接收器并在AndroidManifest.xml中注册。
示例代码:
发送自定义广播
广播分为标准广播和有序广播。
发送标准广播
步骤:
示例代码:
Intent intent = new Intent("com.example.MY_BROADCAST");intent.setPackage("com.example");sendBroadcast(intent);
发送有序广播
步骤与标准广播类似,但需设置优先级。
示例代码:
Intent intent = new Intent("com.example.MY_BROADCAST");intent.setPackage("com.example");sendOrderedBroadcast(intent, null);
本地广播
本地广播解决跨程序安全问题,只能在本应用内传递。
使用步骤:
示例代码:
public class MainActivity extends AppCompatActivity { private LocalBroadcastManager mManager; private MyReceiver mReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = (Button) findViewById(R.id.button); mManager = LocalBroadcastManager.getInstance(this); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent("com.example.MY_BROADCAST"); mManager.sendBroadcast(intent); IntentFilter filter = new IntentFilter(); filter.addAction("com.example.MY_BROADCAST"); mReceiver = new MyReceiver(); mManager.registerReceiver(mReceiver, filter); } }); } @Override protected void.onDestroy() { super.onDestroy(); mManager.unregisterReceiver(mReceiver); } class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "接收成功", Toast.LENGTH_SHORT).show(); } }}
注意事项
通过遵循上述方法和注意事项,可以灵活且安全地使用Android的广播机制。
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月18日 19时47分27秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
HUAWEI防火墙通过IKE方式协商IPSec隧道(采用预共享密钥认证)
2019-03-16
计网复习3
2019-03-16
JDK动态代理的实现原理
2019-03-16
Spring Security 架构与源码分析
2019-03-16
教程丨使用MeterSphere做Dubbo接口测试
2019-03-16
【毕设-STM32f103寄存器版本】智能防盗系统
2019-03-16
勒索病毒Kraken2.0.7分析
2019-03-16
MySQL错误1366处理方法
2019-03-16
pytorch深度学习中每个epoch运行时间的统计代码
2019-03-16
VxWorks 操作系统学习笔记
2019-03-16
链表插入和删除算法
2019-03-16
断言(assert)的用法
2019-03-16
主机与虚拟机(ubuntu)可以互ping,虚拟机不能上网解决办法
2019-03-16
驱动程序之_1_字符设备_13_USB设备_1_基本概念
2019-03-16
wxPython下载安装教程
2019-03-16
HERest源码解析
2019-03-16
java 原型模式(大话设计模式)
2019-03-16
微机原理 6-计算机中常用的数制
2019-03-16