总结自Android四大应用组件之BroadcastReceiver篇
Android四大应用组件之Activity篇https://www.jianshu.com/p/d22981a8ad0e
Android四大应用组件之Service篇https://www.jianshu.com/p/f7d57803b86e
Android四大应用组件之ContentProvider篇https://www.jianshu.com/p/5f783f3db22d
Android四大应用组件之BroadcastReceiver篇https://www.jianshu.com/p/e6283dec21c7
理论概述
系统级跨应用(进程间通信)的事件处理。
一个应用只要注册了对应的Receiver就会接受此广播
代码 (位于两个应用)
广播接收器类继承BroadcastReceiver
静态注册的
public class MyBroadcastReceiver extends BroadcastReceiver{
public void onReceive(Context content,Intent intent){
//处理广播
//静态注册
String ss= intent.getStringExtra("action");
}
}
<receiver android:name="com.xxx1.MyBroadcastReceiver">
<intent-filter>
<action android:name="com.xxx1.MyR.action"/>
</intent-filter>
</receiver>
发送广播
//一般广播
Intent intent = new Intent("com.xxx1.MyR.action");//和上面清单一致
intent.putExtra("action","go");
sendBroadcast(intent);
在发送端app发送时创建了MyBroadcastReceiver ,处理完就销毁,再次发送,再次创建MyBroadcastReceiver
动态注册
public class MyBroadcastReceiver extends BroadcastReceiver{
public void onReceive(Context content,Intent intent){
//处理广播
//静态注册
String ss= intent.getStringExtra("action");
}
}
//activity:
MyBroadcastReceiver re;
public void registBR(){
if(re==null){
re= new MyBroadcastReceiver ();
//创建过滤器
IntentFilter filter = new IntentFilter("com.xxx1.MyR.222");
//注册receiver
registerReceiver(re,filter);
}else{
//已经注册
}
}
public void unregistBR(){
if(re!=null){
unregisterReceiver(re);
re= null;
} else{
// 还没注册
}
}
onDestroy(){
super.onDestroy();
unregistBR();
}
在动态调用方法时才创建MyBroadcastReceiver对象。而且不注销的话不销毁。
*一般来说动态注册比静态注册先接受到消息,因为静态注册先创建类再创建对象。动态直接创建对象。
3.png有序广播
4.png//一般广播
Intent intent = new Intent("com.xxx1.MyR.action");//和上面清单一致
intent.putExtra("action","go");
sendOrderBroadcast(intent);
<receiver android:name="com.xxx1.MyBroadcastReceiver">
<intent-filter android:priority="2147483647">//优先级
<action android:name="com.xxx1.MyR.action"/>
</intent-filter>
</receiver>
if(isOrderedBroadcast()){
abortBroadcast();//中断广播
}
网友评论