美文网首页
Android四大组件-BroadcastReceiver

Android四大组件-BroadcastReceiver

作者: 雷根儿 | 来源:发表于2021-08-16 11:38 被阅读0次

    Android四大组件ActivityServiceBroadcastReceiverContentProvide

    三、BroadcastReceiver

    1.什么是BroadcastReceiver
    BroadcastReceiver组件的主要作用是消息的传递,该消息的传递可以在应用内,也可以在应用之间,它的角色是一个消息的传递者。是在组件之间传播数据的一种机制,这些组件可以位于不同的进程中,起到进程间通信的作用。

    2.生命周期
    1、BroadCastReceiver 的生命周期很短暂,当接收到广播的时候创建,当onReceive()方法结束后销毁
    2、正因为BroadCastReceiver的声明周期很短暂,所以不要在广播接收器中去创建子线程做耗时的操作,因为广播接受者被销毁后,这个子进程就会成为空进程,很容易被杀死
    3、因为BroadCastReceiver是运行在主线程的,所以不能直接在BroadCastReceiver中去做耗时的操作,否则就会出现ANR异常
    最后建议:耗时的较长的工作最好放到Service中去完成

    3.广播的两种注册方式

    注册方式 使用方式 特点 应用场景
    静态注册
    (常驻广播)
    在AndroidManifest中通过<receiver>标签声明 常驻,不受任何声明周期组件的影响
    应用程序关闭后,如果有信息广播来,程序依旧会被系统调用
    需要时刻监听的广播
    动态注册
    (非常驻广播)
    Context.registerReceiver() 灵活,跟随生命组件的周期变化
    (组件结束=广播结束 在组件结束前必须移除广播接收器)
    需要特定时刻监听的广播
    • 静态注册方式在应用安装时就被系统解析它的缺点是耗电、占内存
    • 动态注册一定要在onDestroy()方法里面onRegisterReceiver这方法,否则你会引起内存泄漏

    4. 广播有几种形式 ? 都有什么特点 ?

    • 普通广播:开发者自身定义Intent的广播(最常用),所有的广播接收器几乎会在同一时刻接收到广播信息,接收的先后顺序随机
    • 有序广播:发送出去的广播被广播接收者按照先后顺序接收,同一时刻只有一个广播接收器能够收到这条广播信息。当这个广播接收器中的逻辑处理完毕后,广播才会继续传递,且优先级(priority)高的广播接收器会优先收到广播消息。有序广播可以被接收器截断使得后面的接收器无法收到它。
    • 本地广播:仅在自己的应用内发送接收广播,也就是只有自己的应用能收到,数据更加安全,效率更高因为它内部是通过Handler来实现广播的发送的,但只能采用动态注册的方式;
    • 黏性广播:这种广播会一直滞留,当有匹配该广播的接收器被注册后,该接收器就会收到此条广播;

    5.内部通信实现机制
    1.自定义广播接收者BroadcastReceiver,并复用onRecvice()方法;
    2.通过Binder机制向AMS(Activity Manager Service)进行注册;
    3.广播发送者通过Binder机制向AMS发送广播;
    4.AMS查找符合相应条件(IntentFilter/Permission等)的BroadcastReceiver,将广播发送到5.BroadcastReceiver(一般情况下是Activity)相应的消息循环队列中;
    6.消息循环执行拿到此广播回调BroadcastReceiver中的onReceive()方法.

    四、ContentProvide

    相关文章

      网友评论

          本文标题:Android四大组件-BroadcastReceiver

          本文链接:https://www.haomeiwen.com/subject/aakmbltx.html