Android面试四大组件之广播BroadCast
Posted Rose J
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android面试四大组件之广播BroadCast相关的知识,希望对你有一定的参考价值。
1.按发送方式分类
1. 标准广播
一种完全异步执行的广播,广播发出去之后,所有的广播接收者几乎是同一时间收到消息的。他们之间没有先后顺序可言,而且这种广播是没法被截断的。
2. 有序广播
是一种同步执行的广播,在广播发出去之后,同一时刻只有一个广播接收器可以收到消息。当广播中的逻辑执行完成后,广播才会继续传播。
2.按注册方式 分类
1. 静态注册广播
第一步,写一个广播类:
public class MyBroadCastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "收到广播", Toast.LENGTH_SHORT).show();
}
}
第二步,首先在清单文件中注册广播接受者:
<receiver android:name=".MyBroadCastReceiver">
<intent-filter>
<action android:name="com.pateo.mybroadcast"/>
</intent-filter>
</receiver>
第三步,发送广播
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.setAction("com.pateo.mybroadcast");
sendBroadcast(intent);
}
});
}
2.动态注册广播
@Override
protected void onResume() {
super.onResume();
// 1. 实例化BroadcastReceiver子类 & IntentFilter
myBroadCastReceiver = new MyBroadCastReceiver();
// 2. 设置接收广播的类型
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.pateo.mybroadcast");
// 3. 动态注册:调用Context的registerReceiver()方法
registerReceiver(myBroadCastReceiver,intentFilter);
}
@Override
protected void onPause() {
super.onPause();
//销毁在onResume()方法中的广播
unregisterReceiver(myBroadCastReceiver);
}
3. 按定义方式分类
1.系统广播
通过监听系统状态变化发送广播
MyReceiver myReceiver=new MyReceiver();
IntentFilter intentFilter=new IntentFilter();
//监听系统发出来的广播
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//监听网络状态变化的广播
registerReceiver(myReceiver,intentFilter);
2.自定义广播
发送
Intent intent=new Intent();
// activity 发送广播的名字
intent.setAction("com.test");
sendBroadcast(intent);
接收
MyReceiver myReceiver=new MyReceiver();
IntentFilter intentFilter=new IntentFilter();
intentFilter.addAction("com.test");
registerReceiver(myReceiver,intentFilter);
4.EventBus
EventBus 开源控件实际上是用来替代上述的广播,基于观察者模式, 将事件的接收者和发送者分开,简化了组件之间的通信操作,使用简单、效率高、体积小!
注册
//注册EventBus
EventBus.getDefault().register(this);
注销
//注销
EventBus.getDefault().unregister(this);
发送
// 实现数据发送
EventBus.getDefault().post("666666666666666666");
接收
//方法在主线程中执行
@Subscribe(threadMode = ThreadMode.MAIN)
public void test(MessageEvent event){
/* Do something */
}
以上是关于Android面试四大组件之广播BroadCast的主要内容,如果未能解决你的问题,请参考以下文章
Android四大组件之BroadcastReceiver详细解析