zoukankan      html  css  js  c++  java
  • 第三章BroadcastReceiver

    第三章BroadcastReceiver

    BroadcastReceiver深入

      broadcastReceiver可以很好的解耦合

     

    一,注册广播分为两种

    1. 在androidmanifest.xml中注册(静态注册)

        <receiver android:name="Receiver1">

       <intent-filter>

         <!--和 intent中的action对应-->

         <action android:name="com.zgt.action.mybroadcasr"/>

       </intent-filter>

    </receiver>

    机制分析:

           当触发了sendBroadcast方法后系统会到manifest.xml中寻找与ACTION相对应的action ,找到后会去实例化里面对应的recevier也就是这里的BroastReceiver,

           然后执行里面的void onReceive(Context context, Intent intent)方法

     

    2. 在 代码中注册 (动态注册)

          IntentFilter file = new IntentFilter("com.zgt.action.mybroadcasr"); 

         //和广播中的intentaction对应

          MyBroadcastReceiver br = new MyBroadcatReceiver();

          registerReceiver(br,filter);

         机制分析:动态注册会再程序上保持一个ACTION然后当发出广播的时候会在程序上 

         搜索是否存在相对应的ACTION 如果存在则进入到广播子类中去!

        

       优缺点分析:

              正如机制里面分析的那样,静态注册:简单,但是无法实现与Activity绑定,也 

              就是说activity的的destroybroadcastReceiver无关也占用资源

              动态注册:相对复杂但是可以结束静态带来的局限 

       注:动态绑定只是实现了绑定,所以还是要进行发送了广播才能进行接收。也就是说   

            BroastReceiver里面的onReceive方法才会接收到!

     

    二,   广播有三种

    1. 普通广播

            发送一个广播,所以监听该广播的广播接收者都可以监听到改广播。

    2. 异步广播

        当处理完之后的Intent ,依然存在,这时候registerReceiver(BroadcastReceiver, IntentFilter) 还能收到他的值,直到你把它去掉 不能将处理结果传给下一个接收者 无法终止广播

    3. 有序广播

    按照接收者的优先级顺序接收广播 优先级别在 intent-filter 中的 priority 中声明 ,-1000 1000 之间 值越大 优先级越高 可以终止广播意图的继续传播 接收者可以篡改内容 

     

    普通广播的发送和接收:

     sendBroadcast(intent); 

    Intent intent = new Intent( "cn.lenovo.yangguangf " ); 

     sendBroadcast(intent); 

        priority :这个是 AndroidManifest.xml 中 intent-filter 的参数。 

    < receiver android:name = ".MyBroadcastReceiver" > 

               < intent-filter android:priority = "1000" > 

    < action android:name = "cn.lenovo.yangguangfu" /> 

    </ intent-filter > 

    </ receiver > 

    sendOrderedBroadcast(intent, receiverPermission); 

    ,他决定该广播的级别,级别数值是在 -1000 到 1000 之间 值越大 优先级越高; 

    ,同级别接收是先后是随机的;级别低的收到广播; 

    ,在 android 系统中只要监听该广播的接收者,都能够收到 sendBroadcast(intent) 发出的广播,不能截断广播的继续传播, 

    ,实验现象,在这个方法发来的广播中,代码注册方式中,收到的广播的先后和注明优先级最高的他们的先后是随机。如果都没有优先级,代码注册收到为最先。

     

       异步广播的发送和接收:

       sendStickyBroadcast(intent); 

       当处理完之后的Intent ,依然存在,直到你把它去掉。 

       发这个广播需要权限<uses-permission   

       android:name="android.permission.BROADCAST_STICKY" /> 

    去掉是用这个方法removeStickyBroadcast(intent); 但别忘了在执行这个方法的应用里面 AndroidManifest.xml 同样要加上面的权限; 

    sendStickyOrderedBroadcast(intent, resultReceiver, scheduler, initialCode, initialData, initialExtras) 

    这个方法具有有序广播的特性也有异步广播的特性; 

    发送这个广播要: <uses-permission android:name="android.permission.BROADCAST_STICKY" /> 这个权限。才能使用这个方法。如果您并不拥有该权限,将抛出 SecurityException 的。 

    实验现象( sendStickyOrderedBroadcast ()中),在这个方法发来的广播中,代码注册方式中,收到广播先后次序为:注明优先级的、代码注册的、没有优

     

    有序广播的发送和接收:

     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,  该广播的级别有级别之分,级别数值是在 -1000 到 1000 之间 值越大 优先级越高; 

    2,  同级别接收是先后是随机的,再到级别低的收到广播; 

    3,  同级别接收是先后是随机的,如果先接收到的把广播截断了,同级别的例外的接收者是无法收到该广播的。( abortBroadcast() ) 

    ,能截断广播的继续传播,高级别的广播收到该广播后,可以决定把该钟广播是否截断掉。 

    ,实验现象,在这个方法发来的广播中,代码注册方式中,收到广播先后次序为:注明优先级的、代码注册的、没有优先级的;如果都没有优先级,代码注册收到为最先。 

     

     

     

    QQ:1207834821

     

     

  • 相关阅读:
    Java8 新特性
    Less语法
    【手动开栈】【dfs序】【树状数组】【Tarjan】bzoj2819 Nim
    【dfs序】【树状数组】bzoj1103 [POI2007]大都市meg
    【树链剖分】【树状数组】【最近公共祖先】【块状树】bzoj3631 [JLOI2014]松鼠的新家
    【块状树】【树链剖分】【线段树】bzoj3531 [Sdoi2014]旅行
    【树链剖分】【分块】【最近公共祖先】【块状树】bzoj1984 月下“毛景树”
    【树链剖分】【函数式权值分块】bzoj1146 [CTSC2008]网络管理Network
    【单调队列】bzoj1047 [HAOI2007]理想的正方形
    【单调队列】bzoj2096 [Poi2010]Pilots
  • 原文地址:https://www.cnblogs.com/zhangguangtao/p/3191157.html
Copyright © 2011-2022 走看看