本次内容是广播接收者,广播的类型分为有序广播和无序广播。
无序广播是一种完全异步执行的广播,在广播发出去之后,所有监听了这个广播事件的广播接收器几乎会在同一时刻接收到这条广播,他们之间没有任何先后顺序可言,这种广播效率较高,但是无法被拦截。
有序广播是一种同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够接收到这条消息,当这个广播接收器中的逻辑执行完毕之后广播才会继续传递。所以,此时的广播接收器是有先后顺序的,并且可以被拦截。
下面是拦截有序广播的案列,由于布局极其简单,就不附上效果图了。
MainActivity:
package com.example.bz0209.bryouxu; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void send(View view){ Intent intent=new Intent(); intent.setAction("Intercept_stitch"); sendOrderedBroadcast(intent,null); } } 添加自定义广播接收者,右击包名
MyBroadcastReceiverOne:
package com.example.bz0209.bryouxu; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; /** * Created by Administrator on 2017/6/5. */ public class MyBroadcastReceiverOne extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.i("MyBroadcastReceiverOne","自定义的广播接受者One,接受到广播事件"); } } MyBroadcastReceiverTwo: package com.example.bz0209.bryouxu; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; /** * Created by Administrator on 2017/6/5. */ public class MyBroadcastReceiverTwo extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.i("MyBroadcastReceivertwo","自定义的广播接受者two,接受到广播事件"); } }
MyBroadcastReceiverThree:
package com.example.bz0209.bryouxu; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; /** * Created by Administrator on 2017/6/5. */ public class MyBroadcastReceiverThree extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.i("MyBroadcastReceiverThree","自定义的广播接受者Therr,接受到广播事件"); } } Layout:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.bz0209.bryouxu.MainActivity" android:background="@drawable/stitch_one"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="发送有序广播" android:textSize="18sp" android:layout_centerHorizontal="true" android:layout_marginTop="80dp" android:background="#FBFBFF" android:paddingLeft="5dp" android:paddingRight="5dp" android:onClick="send"/> </RelativeLayout> 执行后会在控制台打印出先后拦截的顺序