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 实例 |