68 lines
2.7 KiB
Markdown
68 lines
2.7 KiB
Markdown
|
# NetworkStateManager 代码分析
|
|||
|
|
|||
|
## 概述
|
|||
|
本文档分析了 `NetworkStateManager` 类中第 23-38 行的构造函数实现,目的是确定哪部分代码是不需要的。
|
|||
|
|
|||
|
## 代码结构分析
|
|||
|
|
|||
|
### 当前实现
|
|||
|
```java
|
|||
|
public NetworkStateManager(Context context) {
|
|||
|
this.context = context.getApplicationContext();
|
|||
|
this.networkMonitor = new NetworkStateMonitor(context);
|
|||
|
// 创建NotificationManager时传入Activity上下文
|
|||
|
this.notificationManager = new NotificationManager(context);
|
|||
|
setupNetworkMonitor();
|
|||
|
}
|
|||
|
|
|||
|
// 重载构造函数,直接传入Activity上下文
|
|||
|
public NetworkStateManager(Activity activity) {
|
|||
|
this.context = activity.getApplicationContext();
|
|||
|
this.networkMonitor = new NetworkStateMonitor(activity);
|
|||
|
// 创建NotificationManager时传入Activity上下文
|
|||
|
this.notificationManager = new NotificationManager(activity);
|
|||
|
setupNetworkMonitor();
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
## 问题分析
|
|||
|
|
|||
|
通过分析 `NotificationManager` 的实现,我们发现:
|
|||
|
|
|||
|
1. `NotificationManager` 有两个构造函数:
|
|||
|
- `NotificationManager(Context context)`:可以接受 Context,并且会检查是否是 Activity 类型来设置 `activityContext`
|
|||
|
- `NotificationManager(Activity activity)`:直接接受 Activity 参数
|
|||
|
|
|||
|
2. 在 `NotificationManager` 的构造函数中,无论传入 Context 还是 Activity,都会正确处理:
|
|||
|
```java
|
|||
|
public NotificationManager(Context context) {
|
|||
|
this.context = context.getApplicationContext();
|
|||
|
// 如果传入的是Activity上下文,也保存一份Activity引用
|
|||
|
if (context instanceof Activity) {
|
|||
|
this.activityContext = (Activity) context;
|
|||
|
}
|
|||
|
registerNotificationClosedReceiver();
|
|||
|
}
|
|||
|
|
|||
|
// 重载构造函数,直接传入Activity上下文
|
|||
|
public NotificationManager(Activity activity) {
|
|||
|
this.context = activity.getApplicationContext();
|
|||
|
this.activityContext = activity;
|
|||
|
registerNotificationClosedReceiver();
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
## 结论
|
|||
|
|
|||
|
在 `NetworkStateManager` 的两个构造函数中,**第一个构造函数(接受 Context 参数的版本)是不必要的**,原因如下:
|
|||
|
|
|||
|
1. 当传入的是 Activity 实例时,第二个构造函数会更直接地处理
|
|||
|
2. 当传入的是普通 Context 时,`NotificationManager` 的构造函数已经能够正确处理 Context 类型检查
|
|||
|
3. 两个构造函数的实现逻辑基本相同,存在代码重复
|
|||
|
|
|||
|
## 建议
|
|||
|
|
|||
|
应该移除接受 Context 参数的构造函数,只保留接受 Activity 参数的构造函数,因为:
|
|||
|
1. 减少代码重复
|
|||
|
2. `NotificationManager` 需要 Activity 上下文才能正常工作(用于启动通知Activity)
|
|||
|
3. 保证传递给 `NotificationManager` 的始终是 Activity 实例
|