Android_5_Broadcast

Broadcast(广播)

在Android中,Broadcast是一种广泛运用的在应用程序之间以及进程间传输信息的机制。而BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件。

首先在需要发送信息的地方,把要发送的信息和用于过滤的信息(如Action、Category)装入一个Intent对象,然后通过发送无序广播 Context.sendBroadcast()、有序广播sendOrderBroadcast()或粘性广播sendStickyBroadcast()方法,把 Intent对象以广播方式发送出去。

当Intent发送以后,对应已经注册的BroadcastReceiver会检查注册时的IntentFilter是否与发送的Intent相匹配,若匹配则就会调用BroadcastReceiver的onReceive()方法。所以当我们定义一个BroadcastReceiver的时候,都需要实现onReceive()方法。

广播是Android组件间的通信方式的一种,一般系统会发送很多广播,当有需要时可以接收系统的广播,同时当我们需要让其他组件做事时,也可以给对应的组件发送广播.

Android广播分为两个方面:发送者和接收者,通常情况下,BroadcastReceiver指的就是广播接收者.

可以使用的场景如下:

1.同一app内部的同一组件内的消息通信(单个或多个线程之间);

2.同一app内部的不同组件之间的消息通信(单个进程);

3.同一app具有多个进程的不同组件之间的消息通信;

4.不同app之间的组件之间消息通信;

5.Android系统在特定情况下与App之间的消息通信。

定义广播接收者:

一.静态广播接收者(在清单文件中声名广播,应用生效广播生效不能被反注册)

1.自定义类继承自BroadCastReciver

 public class Revicer extends BroadcastReceiver { 
 }
 
2.复写 onReceive(Context context, Intent intent) 方法在定义自己要的操作

 @Override
 public void onReceive(Context context, Intent intent) {
        Log.e("icechao","手机已开机,接收到开机广播");
 }
 
3.注册广播接收者,(有两种方式,要看具体使用场景来使用)

    (1).由系统到调用起的广播接收者,当有对应的广播发生时就会调用onReceive方法 
    
        <receiver android:name=".Revicer">
            <intent-filter >
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>
        
    (2).代码中注册广播接收者,当我们不需要时可以手动把这个接收者结束

        IntentFilter intentFilter = newIntentFilter(Intent.ACTION_BOOT_COMPLETED);
        Revicer revicer = new Revicer();
        registerReceiver(revicer,intentFilter);
静态注册的广播不能反注册,只是通过条件判断终止广播执行

二. 动态注册广播(广播在代码中进行注册和取消)

context.registerReceiver

这个方法是定义在Context中的也就是说,当要启动服务时必须要先有一个Context对象,同时当在代码中手动注册广播时,在不使用时可以使用unRegistReceiver把广播接收者取消

unregisterReceiver(revicer);
当在代码中动态注册广播时需要保留这个广播的对象,当需要反注册这个广播时需要使用这个对象

要注意的是在接收的系统的广播时,要在menifet中声名对应的权限否则不能接收到广播

广播几种类型
一. 无序广播
    广播接收者,接收到这个广播没有固定的先后顺序
    通过Context.sendBroadcast()方法来发送,它是完全异步的。所有的receivers
    (接收器)的执行顺序不确定,因此所有的receivers(接收器)接收broadcast的顺序不确定。
二. 有序广播
    广播接收者,在注册时指定优先级,优先级高的接收者先接收到广播
    Context.sendOrderedBroadcast来发送
    BroadcastReceiver可以使用setResult系列函数来结果传给下一个BroadcastReceiver,
    通过getResult系列函数来取得上个BroadcastReceiver返回的结果,
    并可以abort系列函数来让系统丢弃该广播,使用该广播不再传送到别的BroadcastReceiver。
    例:
    <receiver android:name=".SmsReceiver">
        <intent-filter android:priority="100">
            <action android:name="android.provider.Telephony.SMS_RECEIVED"/>                    
        </intent-filter>
    </receiver>
    
三. 粘性广播
    广播不会在被接收后停止,会持续
    Context.sendStickyBroadcast()发送粘性的广播
    使用这个api需要权限android.Manifest.permission.BROADCAST_STICKY,
    粘性广播的特点是Intent会一直保留到广播事件结束,而这种广播也没有所谓的10秒限制,
    10秒限制是指广播如果onReceive方法执行时间超过10秒,系统会将这个广
    播置为可以干掉的candidate,一旦系统资源不够的时候,就会干掉这个广播而让它不执行。
注意:当广播接收者执行超过10s程序就会出现ANR,所以最好不要在广播接收者中进行过于耗时的操作,当onRecieve()方法结束,广播接收者的执行就可以说结束了
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,980评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,422评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,130评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,553评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,408评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,326评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,720评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,373评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,678评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,722评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,486评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,335评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,738评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,283评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,692评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,893评论 2 335

推荐阅读更多精彩内容