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 参数的优先级一个个陆续传递。下一个接收者必须等待上一个接收者完成之后,才能继续接收。 无序广播会根据优先级连续发送出去,无需等待。
浙公网安备 33010602011771号