Android广播

什么是广播?

广播:相当于iOS中的通知,给全局发送一个信息。所有对这条信息感兴趣的广播接收者对应做自己的处理逻辑。

广播接收者:接收广播的对象,一般是localReceiver类

广播种类
  • 1.标准广播(Normal broadcast)
    异步执行,效率高,无法被截断,所有的接收者同时接收到广播信息。

  • 2.有序广播(Ordered broadcast)
    同步执行,效率低,可以被截断,同一时刻只能有一个广播接收者接收到信息,该接收者处理完毕自己的逻辑之后该广播才能继续传递,所以这是的广播接收者是有顺序的。优先级高的广播接收者优先收到广播信息。此时广播是被截断的。

广播的注册方式

静态注册和动态注册

  • 静态注册:在AndroidManifest.xml文件中注册

  • 动态注册:在代码注册

  • 1.静态注册
    注册方式:AndroidManifest.xml文件添加receiver标签

<receiver android:name=".ForceOfflineReceiver" >    
    <intent-filter>        
        <action android:name="com.example.broadcastbestpractice.FORCE_OFFLINE" />    
    </intent-filter>
</receiver>

静态注册特点:程序不需要启动就能进行注册和注销。(需要注意添加权限的声明)

  • 2.动态注册
    动态注册一般在onCreat()方法中进行广播注册。在广播接收者类(必须继承BroadcastReceiver类)中通过重写onReceive()方法。在该方法中进行逻辑处理。onReceive()方法不要执行耗时的操作,否则程序会报错。
    注册方式
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(new BroadcastReceiver(), intentFilter);

动态注册的广播接收者一定要在onDestroy()方法中通过调用** unregisterReceiver()**方法来取消注册。
动态注册特点:非常灵活,但是必须程序启动才能进行注册和注销。

自定义广播
自定义标准广播:
  • 定义一个广播接收类,实现onReceive()方法。
  • 在AndroidManifest.xml文件receiver标签添加自定义广播
<action android:name="com.example.broadcastbest.mybroadcast" /> 
  • 在activity的onCreate()方法中发送广播
Button forceOffline = (Button) findViewById(R.id.force_offline);
forceOffline.setOnClickListener(new OnClickListener() {   
    @Override   
    public void onClick(View v) {     
           Intent intent = new Intent("com.example.broadcastbest.mybroadcast"); 
           sendBroadcast(intent);   
    }
});
发送有序广播

广播是一种跨进程的通信方式(接收系统广播就可以看出)
和标准广播的发送方式一样,只需要将activity中的sendBroadcast(intent)方法修改为sendOrderedBroadcast(intent, null)方法即可。由于有序广播是有顺序的,所以可以在receiver标签的intent-filter标签中追加priority属性,该属性是一个整数值,从而保证接收的顺序,onReceive()方法中调用abortBroadcast()方法,该广播会被截断。

本地广播
  • 作用:
    广播是可以横跨应用程序的,别的应用程序可以直接指定我们应用程序的广播名字来发送垃圾广播,从而会造成对程序的影响。一些关键私密的信息很可能会暴露。为了解决广播的安全问题,Android引入了本地广播机制,使用这个机制发送的广播只能在本地应用内部传递。

  • 实现方式:
    通过localBroadcastManager类在注册和发送广播
    通过localReceiver类来接收广播。

  • 好处

    • 和全局广播相比更高效
    • 安全性更高,保护本程序数据
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Broadcasts Android apps can send or receive broadcast mes...
    woitaylor阅读 11,599评论 0 12
  • 参考:Android总结篇系列:Android广播机制Android广播机制 一. 广播 1. 广播是什么? 广播...
    NickelFox阅读 4,560评论 0 3
  • 广播接收器 是Android的四大组件之一,可见广播在Android中的重要性; 1. 什么是广播? 广播(Bro...
    Lost_Robot阅读 6,004评论 2 10
  • 前言 本来想写一下广播的,发现查阅后有整理的不错的,只好转载图个简便,日后好复习转载:http://www.cnb...
    提升即效率阅读 5,222评论 0 10
  • 回顾一下,今天我学到了什么。 解剖我又复习了一遍大题,二十几道吧总共.发现自己有很多,地方缺漏,然后把一些缺漏都画...
    hi滚滚阅读 1,112评论 0 0

友情链接更多精彩内容