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详细解析

Android四大组件之BroadCast

Android安卓四大组件之广播

Android四大组件-Broadcast Receiver

Android四大组件之BroadcastReceiver

Android系统广播(Broadcast)注册,发送,接收流程解析