开发APP的那些组件---->>>>------Android中BroadcastReceiver的应用

一: 注册广播的两种方式:1,,使用代码注册   2,在Manifest中注册的 比较

  1. 在应用程序的代码中注册注册BroadcastReceiver:registerReceiver(receiver, filter);

    取消注册BroadcastReceiver:unregisterReceiver(receiver);

    当BroadcastReceiver更新UI,通常会使用这样的方法注册。启动Activity时候注册BroadcastReceiver,Activity不可见时候,取消注册。  

  2. 在androidmanifest.xml当中注册

    <receiver>    

    <intent-filter>        

    <action android:name="android.intent.action.PICK" />    

    </intent-filter>

    </receiver>使用这样的方法注册弊端:它会始终处于活动状态,毕竟是手机开发,cpu和电源资源比较少,一直处于活动耗费大,不利。

    二: 广播的三种类型:

    android的广播机制中存在这三种不同的广播类型:
    1,普通广播(Normalbroadcasts)
    发送一个广播,所以监听该广播的广播接收者都可以监听到改广播。
    2, 异步广播
    当处理完之后的Intent,依然存在,这时候registerReceiver(BroadcastReceiver,IntentFilter) 还能收到他的值,直到你把它去掉,不能将处理结果传给下一个接收者,无法终止广播.
    3, 有序广播(Orderedbroadcasts)
    按照接收者的优先级顺序接收广播,优先级别在intent-filter中的priority中声明,-1000
    1000之间,值越大,优先级越高.可以终止广播意图的继续传播.接收者可以篡改内容.

    1,普通广播的发送和接收:
    sendBroadcast(intent);

    代码片段,双击复制
    01
    02
    03
    04
    05
    06
    < receiver android:name = ".MyBroadcastReceiver" >
                < intent-filter android:priority = "1000" >
                  
    < action android:name = "cn.lenovo.yangguangfu" />
    </ intent-filter >
    </ receiver >
    1,他决定该广播的级别,级别数值是在-10001000之间,值越大,优先级越高;
    2,同级别接收是先后是随机的;级别低的收到广播;
    3,在android系统中只要监听该广播的接收者,都能够收到sendBroadcast(intent)发出的广播;
    4,不能截断广播的继续传播,
    5,实验现象,在这个方法发来的广播中,代码注册方式中,收到的广播的先后和注明优先级最高的他们的先后是随机。如果都没有优先级,代码注册收到为最先。
       
    2,  有序广播的发送和接收:
    sendOrderedBroadcast(intent,receiverPermission);
    sendOrderedBroadcast(intent,receiverPermission, resultReceiver,
           scheduler,initialCode, initialData, initialExtras)
    receiverPermission这是权限,一个接收器必须持以接收您的广播。如果为null,不经许可的要求。 
    resultReceiver
    您自己BroadcastReceiver来当作最后的广播接收器。 
    调度自定义处理程序,用以安排resultReceiver回调;如果为null将语境中的主线程举行。 
    initialCode
    一种结果代码的初始值。通常为Activity.RESULT_OK。这个值是-1;为其他int型也可以,如0,1,2; 
    initialData
    一种结果数据的初始值。通常情况下为空,String类型;
    initialExtras
    一种结果额外的初始值。通常情况下为空,Bundle;
    1,  该广播的级别有级别之分,级别数值是在-10001000之间,值越大,优先级越高;
    2,  同级别接收是先后是随机的,再到级别低的收到广播;
    3,  同级别接收是先后是随机的,如果先接收到的把广播截断了,同级别的例外的接收者是无法收到该广播的。(abortBroadcast()
    4,能截断广播的继续传播,高级别的广播收到该广播后,可以决定把该钟广播是否截断掉。
    5,实验现象,在这个方法发来的广播中,代码注册方式中,收到广播先后次序为:注明优先级的、代码注册的、没有优先级的;如果都没有优先级,代码注册收到为最先。


    3, 异步广播的发送和接收:
    sendStickyBroadcast(intent);
    当处理完之后的Intent,依然存在,直到你把它去掉。
    发这个广播需要权限<uses-permissionandroid:name="android.permission.BROADCAST_STICKY" />
    去掉是用这个方法removeStickyBroadcast(intent);但别忘了在执行这个方法的应用里面AndroidManifest.xml同样要加上面的权限;
    sendStickyOrderedBroadcast(intent,resultReceiver, scheduler,
           initialCode,initialData, initialExtras)
    这个方法具有有序广播的特性也有异步广播的特性;
    发送这个广播要:<uses-permissionandroid:name="android.permission.BROADCAST_STICKY" />这个权限。才能使用这个方法。如果您并不拥有该权限,将抛出SecurityException的。
    实验现象(sendStickyOrderedBroadcast()中),在这个方法发来的广播中,代码注册方式中,收到广播先后次序为:注明优先级的、代码注册的、没有优先级的;如果都没有优先级,代码注册收到为最先。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值