面试总结之广播机制

定义

它是一种广泛运用在应用程序之间传输信息的机制,Android中我们发送广播内容是一个Intent,这个Intent中可以携带我们要发送的数据。

使用方法

1.定义广播接收者

public class MyReceiver extends BroadcastReceiver{
   public void onReceiver(Context context,Intent intent)
   {
   String action intent.getAction();
   //do some works
   }
}

2.注册广播接收者
注:一般情况下,如果动态广播和静态广播同时发出,最先收到的广播是来自于动态注册的广播,动态注册的接收者会先执行。
静态注册

<receiver android name=".MyReceiver">
	<intent-filter>
		<action android:name="com.ryg.recriver.LAUNCH"/>
	</intent-filter>
</receiver>	

动态注册
注:动态注册需要进行解注册操作,静态操作就不需要。

IntentFilter filter = new IntentFilter();
filter.addAction("com.ryg.receiver.LAUNCH");
registerReceiver(new MyReceiver(),filter);

3.发送广播

Intent intent = new Intent();
intent.setAction("com.ryg.receiver.LAUNCH");
sendBroadcast(intent);

分类

无序广播

context.sendBroadcast(Intent)方法发送的广播,不可被拦截,当然发送的数据,接收者是不能进行修改的。

有序广播

context.sendOrderBroadcast(Intent)方法发送的广播,可被拦截,而且接收者是可以修改其中要发送的数据,修改和添加都是可以的,这就意味着优先接收者对数据修改之后,下一个接收者接受的数据是上一个接收者已经修改了的,这必须明白。

本地广播

localBroadcastManager.sendBroadcast(Intent),只在app内传播。

系统广播&本地广播

系统广播分析

a.自定义广播接收者BroadcastReceiver,并且重写onReceiver()方法。
  b.通过Binder机制向AMS(Activity Manager Service)进行注册。
  c.广播发送者通过Binder机制向AMS发送广播。
  d.AMS查找符合条件(IntentFilter/Permission等)的BroadcastReceiver,将广播发送到相应的BroadcastReceiver(一般情况下是Activity)的消息队列中。
  e.消息循环执行拿到此广播,回调BroadcastReceiver中的onReceiver()方法。

本地广播分析

相比于系统广播而言,本地广播更加安全,更加高效,
以下是本地广播的特点以及内部的实现机制:特点:
  a.使用它发送的广播将只在自身app内传播,因此你不必担心泄漏隐私的数据。
  b.其他app无法对你的app发送该广播,因此你的app根本不可能收到非自身app发送的该广播,因此你不必担心有安全漏洞可以利用。
  c.比系统广播更加高效。

发布了67 篇原创文章 · 获赞 22 · 访问量 5807

猜你喜欢

转载自blog.csdn.net/qq_40384370/article/details/103961172
今日推荐