Android广播中有序和无序的区别

BroadcastReceiver所对应的广播分两类:普通广播有序广播
普通广播:经过Context.sendBroadcast()方法来发送,它是彻底异步的。
全部的receivers(接收器)的执行顺序不肯定,所以全部的receivers(接收器)接收broadcast的顺序不肯定。
这种方式效率更高,可是BroadcastReceiver没法使用setResult系列、getResult系列abort(停止)系列API
有序广播:是经过Context.sendOrderedBroadcast来发送,全部的receiver依次执行。
BroadcastReceiver能够使用setResult系列函数结果传给下一个BroadcastReceiver,经过getResult系列函数来取得上个BroadcastReceiver返回的结果,并能够abort系列函数来让系统丢弃该广播,使用该广播再也不传送到别的BroadcastReceiver
能够经过在intent-filter中设置android:priority属性来设置receiver的优先级,优先级相同的receiver其执行顺序不肯定。
若是BroadcastReceiver是代码中注册的话,且其intent-filter拥有相同android:priority属性的话,先注册的将先收到广播。

有序广播,即从优先级别最高的广播接收器开始接收,接收完了若是没有丢弃,就下传给下一个次高优先级别的广播接收器进行处理,依次类推,直到最后。若是多个应用程序设置的优先级别相同,则谁先注册的广播,谁就能够优先接收到广播。android

这里接收短信的广播是有序广播,所以能够设置你本身的广播接收器的级别高于系统原来的级别,就能够拦截短信,而且不存收件箱,也不会有来信提示音。web

实现方法是:异步

<receiver android:name=".SmsReceiver">    ide

  <intent-filter android:priority="100">     函数

    <action android:name="android.provider.Telephony.SMS_RECEIVED"/>                        post

  </intent-filter> spa

</receiver>orm

里面的android:priority="100"就是设定广播接收器的级别,这个值从1000~-1000,数值越大,优先级别就越高。blog

相关文章
相关标签/搜索