第一行代码学习笔记第五章——详解广播机制

本文详述了Android中的广播机制,包括标准广播、有序广播的使用,以及动态和静态注册广播接收器的方法。同时讲解了如何监听网络变化和实现开机广播。此外,还介绍了本地广播的优势和Git作为版本控制工具的基础操作,如安装、创建代码仓库和提交本地代码。

知识点目录

知识点回顾

在网络通信里,在一个IP网络范围中,最大的IP地址是被保留作为广播地址来使用的。例如:某个网络的IP范围是192.168.0.XXX,子网掩码是255.255.255.0,那么这个网络的广播地址就是192.168.0.255。广播数据包会被发送到同一网络上的所有端口,在该网络中的每台主机都会接收到这个广播。

为了方便进行系统级别的消息通知,Android也引入了一套类似的广播消息机制。

5.1 广播机制

Android中的广播主要分为两种类型:标准广播和有序广播。

标准广播

完全异步执行!!!在广播发出后,所有的广播接收器几乎在同一时刻接受到这条广播信息。

特点:广播效率高、没有任何先后顺序、无法被拦截

有序广播

同步执行!!!广播发出后,同一时刻只会有一个广播接收器收到这条广播消息,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递。

特点:广播接收器有先后顺序,优先级高的广播接收器先收到广播消息,可以被优先级高的广播接收器拦截。

5.2 接收系统广播

Android内置了很多系统级别的广播:

  • 开机广播

  • 电池电量发生变化广播

  • 时间或时区发生改变广播

  • 等等。。。

5.2.1 动态注册监听网络变化

广播接收器可以自由注册自己感兴趣的广播进行注册。注册的方式有两种:

  • 代码中注册(也称为动态注册)

  • AndroidManifest.xml中注册(也称为静态注册)

动态注册监听网络变化的步骤如下:

  • 创建一个广播接收器,继承BroadcastReceiver,重写onReceive()方法

      class NetworkChangeReceiver extends BroadcastReceiver {
          @Override
          public void onReceive(Context context, Intent intent) {
              ConnectivityManager connectivityManager = (ConnectivityManager) getSys
### 计算机网络自顶向下方法 第7版 第5章 学习笔记 #### 5.1 网络层控制平面概述 在网络层中,除了负责数据传输的数据平面外,还存在一个至关重要的组成部分——控制平面。控制平面的主要职责在于决定分组如何从源到达目的地的具体路径[^1]。 #### 5.2 路由算法分类 路由选择协议是控制平面上的核心机制之一,用于确定最佳路径。这些协议可以根据不同的标准进行分类: - **静态 vs 动态**:静态路由配置固定不变;动态路由则能随网络状况调整。 - **集中式 vs 分布式**:前者依赖中央节点处理所有决策;后者允许各路由器独立作出最优选择。 - **内部网关协议 (IGP)** 和 **外部网关协议 (EGP)** :分别适用于自治系统内和之间的通信[^3]。 #### 5.3 RIP 协议详解 RIP(Routing Information Protocol)是一种广泛使用的距离矢量型动态路由协议。其特点如下: - 使用跳数作为度量单位; - 定期广播更新消息给邻居路由器; - 收敛速度较慢,在大型复杂网络环境中表现不佳[^5]。 ```python def rip_update(neighbor_distances): updated = False for neighbor, distance in neighbor_distances.items(): new_distance = min([distance + d for n, d in distances_to_neighbors.items() if n != neighbor]) if new_distance < known_distances[neighbor]: known_distances[neighbor] = new_distance updated = True return updated ``` #### 5.4 OSPF 协议介绍 OSPF(Open Shortest Path First)属于链路状态类型的路由协议,具有更高的效率和灵活性。该协议通过构建完整的拓扑图并应用Dijkstra算法找到最短路径树来实现高效寻径。 ```python import heapq def dijkstra(graph, start_node): shortest_paths = {start_node: (None, 0)} current_node = start_node visited = set() while current_node is not None: visited.add(current_node) destinations = graph.edges[current_node] weight_to_current_node = shortest_paths[current_node][1] for next_node, weight in destinations.items(): weight += weight_to_current_node if next_node not in shortest_paths: shortest_paths[next_node] = (current_node, weight) else: current_shortest_weight = shortest_paths[next_node][1] if current_shortest_weight > weight: shortest_paths[next_node] = (current_node, weight) next_destinations = {node: shortest_paths[node] for node in shortest_paths if node not in visited} if not next_destinations: break current_node = min(next_destinations, key=lambda k: next_destinations[k][1]) return shortest_paths ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值