广播的分类,注册,本地广播

本文介绍了广播的基本概念,包括同步和异步的区别。同步广播通过sendOrderedBroadcast()实现,有序执行且可拦截;异步广播通过sendBroadcast()发送,效率高但无法拦截。广播的注册分为动态注册(运行时控制,需程序启动后生效)和静态注册(程序未启动也可接收)。此外,还讨论了本地广播的优势,如提高安全性、防止数据泄露和提高效率,它使用LocalBroadcastManager进行内部通信。

简单简绍一下同步和异步的区别
同步:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。
异步:发送方发出数据后,不等接收方响应,接着发送一下个数据包的通讯方式。

标准广播:
异步执行,效率高,无法被拦截。sendBroadCast()
有序广播:
同步执行,可以截断,优先级高的广播接收器就可以先收到广播消息。sendOrderedBroadcast();

注册的两种方式:
动态注册:可以自由的控制注册和销毁,但是必须在程序启动之后才能接收到广播。
静态注册:程序没有启动也会受到广播

/**
 * 动态注册
 */
public class MainActivity extends AppCompatActivity {

    private NetworkChangeReceiver mNetworkChangeReceiver;

    //2.在需要接收广播的地方注册registerReceiver()
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        mNetworkChangeReceiver = new NetworkChangeReceiver();
        registerReceiver(mNetworkChangeReceiver,intentFilter);
    }
    //3.销毁广播unregisterReceiver()
    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(mNetworkChangeReceiver);
    }
    //1.新建一个类让它继承BroadcastReceiver
    class NetworkChangeReceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            //这是一个系统服务类,专门用于管理网络连接
            ConnectivityManager mConnectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = mConnectivityManager.getActiveNetworkInfo();
            if(networkInfo != null && networkInfo.isAvailable()) {
                Toast.makeText(context, "network is available()", Toast.LENGTH_SHORT).show();
            }else{
                Toast.makeText(context, "network is unavailable()", Toast.LENGTH_SHORT).show();
            }
        }
    }
}
<receiver
            android:name=".BootCompleteReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <!--Android启动的时候需要的广播-->
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>

注意:onReceiver()方法中不能添加过多的逻辑或者进行任何耗时操作,因为该方法中不允许开启线程的。

本地广播:
本地广播能够很好的解决安全性问题,值能够在应用程序的内部进行传递。主要是使用LocalBroadcastManager

mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);//获取LocalBroadcastManager的实例

本地广播的优势:
可以明确的知道正在发送的广播不会离开我们的程序,因此不必担心机密数据泄露
其它的程序无法将广播发送到我们程序的内部,因此不需要担心会有安全泄露的隐患
发送本地广播比发送系统全局广播将会更加高效

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值