android 基础一 <Broadcast>

1.无序广播

//静态注册
       <receiver android:name=".broadcast.MyReceiver1">
            <intent-filter>
                <action android:name="com.broadcast.test1"/>
            </intent-filter>
        </receiver>

//接收广播
     public class MyReceiver1 extends BroadcastReceiver {

        String TAG="MyReceiver1";
        @Override
        public void onReceive(Context context, Intent intent) {
         if("com.broadcast.test1".equals(intent.getAction())) {
             Log.e(TAG,"收到广播信息");
           }
       }
    }

//发送广播
 public void send(View view){
        Intent intent=new Intent();
        intent.setAction("com.broadcast.test1");
        sendBroadcast(intent);
    }

 2.有序广播

      //注册广播接收者
        <receiver android:name=".broadcast.MyReceiver2"  >
            <intent-filter android:priority="-1000">
                    <action android:name="com.broadcast.test2" />
            </intent-filter>
        </receiver>

        <receiver android:name=".broadcast.MyReceiver3">
           <intent-filter android:priority="1000">
               <action android:name="com.broadcast.test2" />
           </intent-filter>
        </receiver>



// 广播接收者1:
public class MyReceiver2 extends BroadcastReceiver {

    String TAG="MyReceiver2";
    @Override
    public void onReceive(Context context, Intent intent) {
        if("com.broadcast.test2".equals(intent.getAction())) {
            Log.e(TAG,"收到有序广播信息 MyReceiver2 thread="+Thread.currentThread().getName());
        }
    }
}

// 广播接收者2:
public class MyReceiver3 extends BroadcastReceiver {
    String TAG="MyReceiver3";
    @Override
    public void onReceive(Context context, Intent intent) {
        if("com.broadcast.test2".equals(intent.getAction())) {
            Log.e(TAG,"收到有序广播信息 MyReceiver3 thread= "+Thread.currentThread().getName());
 //终止广播继续传递   
   abortBroadcast();
//改变结果数据
   setResultData();
   setResultExtras();


        }
    }
}

// 发送广播
public void send(View view){
     Intent intent=new Intent();
     intent.setAction("com.broadcast.test2");
    //该字符串指定接收者必须持有的权限,以便接收您的广播。如果为空,则不需要权限。
     String receiverPermission=null;
    //您自己的BroadcastReceiver作为广播的最终接收器。
     BroadcastReceiver resultReceiver=null;
    //用于调度resultReceiver回调;如果为空,则在上下文的主线程中调度  (这个参数可以设置将广播接收于后台线程回调)
     Handler scheduler=null;
    //结果代码的初始值。经常 Activity.RESULT_OK
     int initialCode= Activity.RESULT_OK;
    //initialData结果数据的初始值。经常null
     String initialData=null;
    //initialExtras是结果extras的初始值。经常null
     Bundle initialExtras=null;
     sendOrderedBroadcast(intent,receiverPermission,resultReceiver,scheduler,initialCode,initialData,initialExtras);
}

  

 

3.子线程接收resultReceiver

public void send(View view){

        Intent intent=new Intent();
        intent.setAction("com.broadcast.test2");
        //该字符串指定接收者必须持有的权限,以便接收您的广播。如果为空,则不需要权限。
        String receiverPermission=null;
        //您自己的BroadcastReceiver作为广播的最终接收器。
        FinalReceiver resultReceiver=null;
        //用于调度resultReceiver回调;如果为空,则在上下文的主线程中调度  (这个参数可以设置将resultReceiver参数的广播接收于后台线程回调)
        Handler scheduler=null;
        //结果代码的初始值。经常 Activity.RESULT_OK
        int initialCode= Activity.RESULT_OK;
        //initialData结果数据的初始值。经常null
        String initialData=null;
        //initialExtras是结果extras的初始值。经常null
        Bundle initialExtras=null;
        //----------------------------
        HandlerThread mThread = new HandlerThread("myThread");
        mThread.start();
        scheduler = new Handler(mThread.getLooper());

        resultReceiver=new FinalReceiver();
        //-----------------------------
        sendOrderedBroadcast(intent,receiverPermission,resultReceiver,scheduler,initialCode,initialData,initialExtras);

    }

  

 

 

  4.无序广播的部分API介绍:

     <1>改变传递的数据:

       setResultData();
setResultExtras();

  <2>终止广播传递

              abortBroadcast();


 

 

 

有序广播和无序广播的区别:

1.有序广播可以改变结果,然后发送给下一个接收者。 无序广播不可以改变结果

2.有序广播可以中断广播传递。无序广播不可以中断

3.有序广播,效率没有无序广播高。

4.有序广播还可以使用子线程接收resultReceiver广播。

5.有序广播是根据intent-filter android:priority 参数的优先级一个个陆续传递。下一个接收者必须等待上一个接收者完成之后,才能继续接收。 无序广播会根据优先级连续发送出去,无需等待。

 

 

posted @ 2019-07-07 22:15  zp007  阅读(152)  评论(0编辑  收藏  举报