安卓 广播机制

广播的类型主要分为:1.标准广播    2.有序广播

1.标准广播: 完全异步执行的广播,  发出后,所有的broadcast receiver 同时收到信息,无法被拦截            全部一起收到

2.有序广播: 同步执行的广播,    优先级高的先收到,逻辑执行完毕   再传递给下一个,可以拦截,拦截后,后面的就接收不到了   A ->B ->C

****************************************************************************************************************************************************************************************

广播的注册分为  1.动态注册  2.静态注册          广播接收器不允许开启多线程

1.动态注册  动态注册的广播一定要取消注册

新建一个类,让它继承自 BroadcastReceiver  并重写父类的onReceive()方法,并在onCreate()中调用registerReceiver()方法注册onDestroy()中调用unregisterReceiver()取消注册

2.静态注册

在AndroidManifest中的<receiver></receiver>中注册注册内容

android:name=".BootCompleteReceiver"

android:enabled="true"

android:exported="true"

<intent-filter>

<action android:name="android.intent.action.BOOT_COMPLETED"/>    此为action值,启动后会发出android.intent.action.BOOT_COMPLETED,可改

</intent-filter>

然后再在此中注册权限 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

****************************************************************************************************************************************************************

发送标准广播:新建一个类继承BroadcastReceiver  重写 onReceive()方法,里面写一个Toast发送内容,

在AndroidManifest中的<receiver>中加入

<intent-filter>

<action android:name="aaa">

</intent-filter>

然后修改mainactivity文件,点击事件中加入

Intent intent = new Intent("aaa");

sendBroadcast(intent);

这样,所有监听了  aaa  这条广播的接收器就会接收到消息,可以是不同的软件

*************************************************************************************************************************************************

发送有序广播:广播是可以跨进程的通信方式


改动mainactivity中的sendBroadcast(),将其改为sendOrderedBroadcast(intent,null)

两个app都注册了

<intent-filter>

<action android:name="aaa">

</intent-filter>

,可以在intent-filter后面加上android:priority属性给广播设置优先级 ,数值越大,越先收到广播,

在先收到广播的app中的  onReceive()方法中写入 abortBroadcast() 可截断广播的传递

本地广播:高效,安全

使用LocalBroadcastManager来对广播进行管理

通过LocalBroadcastManager 的getInstance()方法得到一个实例,然后在注册广播接收器的时候调用LocalBroadcastManager的registerReceiver()方法

在发送广播时调用LocalBroadcastManager的sendBroadcast()方法

猜你喜欢

转载自www.cnblogs.com/acg88688/p/9392902.html