简单简绍一下同步和异步的区别
同步:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。
异步:发送方发出数据后,不等接收方响应,接着发送一下个数据包的通讯方式。
标准广播:
异步执行,效率高,无法被拦截。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的实例
本地广播的优势:
可以明确的知道正在发送的广播不会离开我们的程序,因此不必担心机密数据泄露
其它的程序无法将广播发送到我们程序的内部,因此不需要担心会有安全泄露的隐患
发送本地广播比发送系统全局广播将会更加高效
本文介绍了广播的基本概念,包括同步和异步的区别。同步广播通过sendOrderedBroadcast()实现,有序执行且可拦截;异步广播通过sendBroadcast()发送,效率高但无法拦截。广播的注册分为动态注册(运行时控制,需程序启动后生效)和静态注册(程序未启动也可接收)。此外,还讨论了本地广播的优势,如提高安全性、防止数据泄露和提高效率,它使用LocalBroadcastManager进行内部通信。
223万+

被折叠的 条评论
为什么被折叠?



