iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android 广播接收器BroadcastReceiver详解
  • 727
分享到

Android 广播接收器BroadcastReceiver详解

2024-04-02 19:04:59 727人浏览 八月长安
摘要

目录一、什么是BroadcastReceiver1.1、作用1.2、实现原理二、创建广播接收器三、注册广播接收器3.1、静态注册注册发送通知3.2、动态注册四、系统广播总结一、什么是

一、什么是BroadcastReceiver

BroadcastReceiver 是安卓系统中四大组件之一,在Android开发中,BroadcastReceiver的应用场景非常多,Android 广播分为两个角色:广播发送者、广播接收者。

1.1、作用

广播接收器用于响应来自其他应用程序或者系统的广播消息。

  • 不同组件之间通信(包括应用内 / 不同应用之间)
  • 与 Android 系统在特定情况下的通信(如当电话呼入时、网络可用时)
  • 多线程通信

1.2、实现原理

Android中的广播使用了设计模式中的观察者模式:基于消息的发布/订阅事件模型。

模型中有3个角色:

  • 消息订阅者(广播接收者)
  • 消息发布者(广播发布者)
  • 消息中心(AMS,即Activity Manager Service)

广播接收者通过 Binder机制在AMS注册

广播发送者通过 Binder 机制向AMS发送广播

AMS根据广播发送者要求,在已注册列表中,寻找合适的广播接收者(寻找依据:IntentFilter / Permission)

AMS将广播发送到合适的广播接收者相应的消息循环队列中;

广播接收者通过消息循环拿到此广播,并回调 onReceive()

二、创建广播接收器

广播接收器需要实现为BroadcastReceiver类的子类,并重写onReceive()方法来接收以Intent对象为参数的消息。

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        System.out.println("我是创建好的通知");
    }
}

三、注册广播接收器

广播接收器的注册分为两种:

  • 静态注册
  • 动态注册

3.1、静态注册

应用程序通过在AndroidManifest.xml中注册广播接收器来监听制定的广播意图。

注册

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<receiver android:name=".MyReceiver"
    android:exported="true">
    <intent-filter>
        <action android:name="com.tiger_test"
            tools:ignore="BatteryLife" />
    </intent-filter>
</receiver>

发送通知

在Activity 中新增一个发送通知的点击事件

    public void onClickStatic(View view) {
        System.out.println("MainActivity2.onClickStatic");
//        com.tiger_test 必须和清单文件中注册的保持一致
        Intent intent = new Intent();
        intent.setAction("com.tiger_test");
        intent.setPackage("com.traveleasy.activitydemo");
        sendBroadcast(intent);
    }

当点击通知发送按钮时,系统会自动实例化MyReceiver类,并注册到系统中。

静态注册是常驻广播,不受任何组件生命周期的影响

注意:由于自8.0以后隐式广播不能进行静态注册了,所以这里通过setPackage()指定应用程序响应广播。

3.2、动态注册

通过reGISterReceiver()注册广播监听

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
//        在onCreate 中注册广播
        MyReceiver myReceiver = new MyReceiver();
        IntentFilter filter = new IntentFilter();
        filter.addAction("com.tiger_test");
        registerReceiver(myReceiver, filter);
    }

触发通知

public void onClickStatic(View view) {
    //        com.tiger_test 必须和注册的保持一致
    Intent intent = new Intent();
    intent.setAction("com.tiger_test");
    sendBroadcast(intent);
}

在页面关闭时记得通过unregisterReceiver()注销广播监听,否则会因广播持有Activity引用导致内存泄露。

@Override
protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(myReceiver);
}

运行结果

需要注意,在onReceive()不能执行耗时操作,onReceive()默认是在主线程中,进行耗时会阻塞主线程,如果非要执行耗时操作最好开启一个服务在服务中进行耗时操作,不建议开启线程来处理耗时操作,因为BroadCastReceiver的生命周期很短,可能在子线程结束前BroadCastReceiver已经退出,如果当BroadCastReceiver所在的进程结束,虽然该进程中可能有用户启动的新线程,但是由于该进程内没有活动的组件,系统会在内存紧张的时候,优先结束掉该进程,这就会导致BroadCastReceiver启动的子线程不能执行完。

四、系统广播

上面我们一起学习了自定义广播,下面我们一起来看一下Android 系统主要的系统广播类型。

事件常量描述
android.intent.action.BATTERY_CHANGED持久的广播,包含电池的充电状态,级别和其他信息。
android.intent.action.BATTERY_LOW标识设备的低电量条件。
android.intent.action.BATTERY_OKAY标识电池在电量低之后,现在已经好了。
android.intent.action.BOOT_COMPLETED在系统完成启动后广播一次。
android.intent.action.BUG_REPORT显示报告bug的活动。
android.intent.action.CALL执行呼叫数据指定的某人。
android.intent.action.CALL_BUTTON用户点击"呼叫"按钮打开拨号器或者其他拨号的合适界面。
android.intent.action.DATE_CHANGED日期发生改变。
android.intent.action.REBOOT设备重启。

总结

在BroadcastReceiver 中,广播的类型主要分为两大类

  • 标注广播
  • 有序广播

标准广播

标准广播是一种完全异步执行的广播,在广播发出之后,所有的BroadcastReceiver几乎在同一时刻收到这个广播消息,它们之间没有先后顺序,这种广播的效率较高,并且不能被拦截。

有序广播

有序广播是一种完全同步的广播,在广播发出后只能有一个BroadcastReceiver能接收到这个广播消息,当这个BroadcastReceiver中的逻辑执行完毕后,广播才能继续向下传递。所以这个广播是有顺序的,所以这种广播也是可以被拦截的,如果被拦截了后面的BroadCastReceiver则不能收到广播消息了。

到此这篇关于Android 广播接收器BroadcastReceiver详解的文章就介绍到这了,更多相关Android BroadcastReceiver内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Android 广播接收器BroadcastReceiver详解

本文链接: https://www.lsjlt.com/news/164779.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android 广播接收器BroadcastReceiver详解
    目录一、什么是BroadcastReceiver1.1、作用1.2、实现原理二、创建广播接收器三、注册广播接收器3.1、静态注册注册发送通知3.2、动态注册四、系统广播总结一、什么是...
    99+
    2024-04-02
  • Android之 BroadcastReceiver广播接收器详解
    一 四大组件 1 Activity组件,它一个单独的窗口,程序流程都必须在Activity中运行。 2 service组件,用于在后台完成用户指定的操作。 3 content provider组件,会为所有的应用准备一个内容窗口,并且保留数...
    99+
    2023-09-22
    android
  • Android组件之BroadcastReceiver广播接收者
    目录本节引言1.BroadcastReceiver是什么?2.两种广播类型:3.接收系统广播1)两种注册广播的方式2)动态注册实例(监听网络状态变化)3)静态注册实例(接收开机广播)...
    99+
    2023-05-16
    Android BroadcastReceiver Android 组件
  • Android四大组件之广播BroadcastReceiver详解
    定义 BroadcastReceiver,“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。在Android系统中,广播体现在方方面面,例如当开机完成后系统会产...
    99+
    2024-04-02
  • Android BroadcastReceiver广播简单使用
    本文实例为大家分享了Android BroadcastReceiver广播使用的具体代码,供大家参考,具体内容如下 静态的BroadcastReceiver 主要代码 publi...
    99+
    2024-04-02
  • Android自定义广播接收
    本文实例为大家分享了Android自定义广播接收的具体代码,供大家参考,具体内容如下 实现效果: MainActivity.java代码: package com.henu.b...
    99+
    2024-04-02
  • [Android]App之间发送和接收广播
    这里使用不同模块来实现app之间的广播通信,以两个app为例,通过点击按钮来实现的~   1. broad模块 - 忽略BootCompleteReceiver和MainActivity(这是其他的~)  步骤: (1)创建 BroadO...
    99+
    2023-09-18
    android java 开发语言
  • 怎么在Android中接收自定义广播
    本篇文章给大家分享的是有关怎么在Android中接收自定义广播,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。MainActivity.java代码:package c...
    99+
    2023-06-15
  • android系统广播收不到了怎么解决
    如果你的Android设备无法收到广播,可以尝试以下解决方法:1. 检查应用权限:确保你的应用已经获得了适当的权限以接收广播。在An...
    99+
    2023-09-25
    android
  • Android启动内置APK和动态发送接收自定义广播实例详解
    Android启动内置APK和动态发送接收自定义广播实例详解工作中遇到这样一个需求,需要为按键添加一个亲情号,提供一个接口启动内置的APK,思考再三决定更改Framework,利用广播机制去实现。一、代码动态自主启动内置APK我们都知道An...
    99+
    2023-05-31
    android 内置apk 广播
  • Android四大组件之broadcast广播详解
    目录基础广播两大类广播广播的动态和静态注册监听时间变化监听系统启动案例创建 receiver设置权限发送自定义广播如何发送与接收有序广播基础广播 两大类广播 标准广播:异步执行,广播...
    99+
    2024-04-02
  • 详解Android广播Broadcast的启动流程
    Android中的广播是一种用于应用程序之间通信的机制。它允许应用程序发送和接收系统级或应用程序级的广播消息。当一个广播被发送时,系...
    99+
    2023-08-11
    Android
  • Android 给广播接收器增加权限(permission)或signature签名权限
    一. 普通权限 添加权限         当普通广播接收器需要增加权限时,需要在广播接收器所在的AndroidManifest.xml 文件中添加权限: 注:我查到的资料是在广播接收器所在的AndroidManifest....
    99+
    2023-09-27
    android
  • Android四大组件之BroadcastReceiver详解
    BroadcastReceiver是Android四大组件之一,用于接收和处理系统广播或者应用内发送的广播。广播是一种跨组件、跨应用的通信机制,可以用于在应用内部或者应用之间传递消息或者事件。BroadcastReceiver的主要作用...
    99+
    2023-08-09
    Android
  • Android studio 广播的简单使用代码详解
    1.在布局文件里面加入按钮,等会发送广播 <?xml version="1.0" encoding="utf-8"?> <LinearLayou...
    99+
    2024-04-02
  • python的广播机制详解
    目录为什么会有广播机制在矩阵或向量相关运算中的广播机制1、一般的运算2、一个矩阵一个向量的情况3、两个向量4、矩阵乘法的广播机制总结为什么会有广播机制 python语言在设计的时候,...
    99+
    2024-04-02
  • Android 使用registerReceiver注册BroadcastReceiver案例详解
    android.context.ContextWrapper.registerReceiver public Intent registerReceiver (Broadcast...
    99+
    2024-04-02
  • Pytorch中的广播机制详解(Broadcast)
    目录1. Pytorch中的广播机制2. 广播机制的理解3. 两个张量进行广播机制的条件4. 当两个张量满足可广播条件后5. 从空间上理解广播机制总结1. Pytorch中的广播机制...
    99+
    2023-01-03
    Pytorch广播机制 Pytorch Broadcast 广播机制
  • C语言广播的使用详解
    向子网中多台计算机发送消息,并且子网中所有的计算机都可以接收到发送方发送的消息,每个广播消息都包含一个特殊的IP地址,这个IP中子网内主机标志部分的二进制全部为1(也就是网络号是25...
    99+
    2024-04-02
  • Android四大组件之broadcast广播使用讲解
    目录一、广播机制概述二、广播接收者1、广播接收者的创建2、广播接收者的注册三、广播的类型1、无序广播2、有序广播一、广播机制概述 通常情况下在学校的每个教室都会装有一个喇叭,这些喇叭...
    99+
    2022-12-26
    Android broadcast Android broadcast广播组件
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作