zhibo/android-app/防抖功能使用指南.md

226 lines
5.8 KiB
Markdown
Raw Permalink Normal View History

# 防抖功能使用指南
## 已创建的防抖工具类
已创建 `DebounceClickListener.java`,位于:
```
android-app/app/src/main/java/com/example/livestreaming/DebounceClickListener.java
```
## 使用方法
### 1. 基本用法默认500ms防抖
**之前的代码:**
```java
button.setOnClickListener(v -> {
// 处理点击事件
doSomething();
});
```
**修改后的代码:**
```java
button.setOnClickListener(new DebounceClickListener() {
@Override
public void onDebouncedClick(View v) {
// 处理点击事件
doSomething();
}
});
```
### 2. 自定义防抖时间
```java
button.setOnClickListener(new DebounceClickListener(1000) { // 1秒防抖
@Override
public void onDebouncedClick(View v) {
doSomething();
}
});
```
## 已添加防抖的位置
### WorkDetailActivity.java ✅
- [x] 返回按钮 (backButton)
- [x] 操作菜单按钮 (actionButton)
- [x] 点赞按钮 (likeButtonContainer)
- [x] 收藏按钮 (favoriteButtonContainer)
- [x] 评论按钮 (commentButtonContainer)
- [x] 描述文本点击 (descriptionText)
## 需要添加防抖的位置
### 高优先级(用户交互频繁的按钮)
#### MainActivity.java
- [ ] 菜单按钮 (menuButton) - 第312行
- [ ] 头像按钮 (avatarButton) - 第322行
- [ ] 通知图标 (notificationIcon) - 第335行
- [ ] 添加直播按钮 (fabAddLive) - 第429行
- [ ] 麦克风/搜索图标 (micIcon) - 第505行
- [ ] 创建直播间对话框确认按钮 - 第898行
- [ ] 复制推流地址按钮 (copyAddressBtn) - 第1053行
- [ ] 复制推流密钥按钮 (copyKeyBtn) - 第1058行
#### ConversationActivity.java
- [ ] 返回按钮 (backButton) - 第64行
- [ ] 发送按钮 (sendButton) - 第175行
#### EditProfileActivity.java
- [ ] 返回按钮 (backButton) - 第106行
- [ ] 取消按钮 (cancelButton) - 第107行
- [ ] 头像行点击 (avatarRow) - 第114行
- [ ] 头像预览点击 (avatarPreview) - 第117行
- [ ] 保存按钮 (saveButton) - 第145行
- [ ] 选择图片按钮 (pick) - 第308行
- [ ] 拍照按钮 (camera) - 第313行
- [ ] 取消按钮 (cancel) - 第321行
- [ ] 性别输入点击 (inputGender) - 第351行
- [ ] 位置输入点击 (inputLocation) - 第366行
- [ ] 位置确认按钮 (confirmButton) - 第438行
- [ ] 位置取消按钮 (cancelButton) - 第444行
- [ ] 生日输入点击 (inputBirthday) - 第466行
- [ ] 生日确认按钮 (confirmButton) - 第547行
- [ ] 生日取消按钮 (cancelButton) - 第572行
#### LoginActivity.java
- [ ] 登录按钮
- [ ] 注册跳转按钮
#### RegisterActivity.java
- [ ] 注册按钮
- [ ] 返回登录按钮
#### ProfileActivity.java
- [ ] 返回按钮
- [ ] 编辑资料按钮
- [ ] 关注/取消关注按钮
- [ ] 作品点击
#### PublishWorkActivity.java
- [ ] 返回按钮
- [ ] 选择图片/视频按钮
- [ ] 发布按钮
#### SearchActivity.java
- [ ] 返回按钮
- [ ] 搜索按钮
- [ ] 搜索建议项点击
#### SettingsPageActivity.java
- [ ] 返回按钮
- [ ] 各个设置项点击
- [ ] 退出登录按钮
### 中优先级(列表项点击)
#### Adapter类
- [ ] ConversationsAdapter - 对话列表项点击
- [ ] ConversationMessagesAdapter - 消息项点击(图片、语音)
- [ ] CommentAdapter - 评论点赞按钮
- [ ] BadgesAdapter - 徽章项点击
- [ ] DrawerCardsAdapter - 抽屉卡片点击
- [ ] FriendsAdapter - 好友项点击
- [ ] NearbyUsersAdapter - 附近用户项点击
- [ ] NotificationsAdapter - 通知项点击
- [ ] RoomsAdapter - 直播间项点击
- [ ] UserWorksAdapter - 作品项点击
- [ ] WaterfallRoomsAdapter - 瀑布流直播间项点击
### 低优先级(不太需要防抖的场景)
- [ ] 对话框关闭按钮(用户不太会快速重复点击)
- [ ] 底部导航栏切换(系统已有防抖机制)
- [ ] 长按事件(不需要防抖)
## 批量替换建议
可以使用以下正则表达式进行批量查找替换:
**查找:**
```regex
\.setOnClickListener\(v -> \{
```
**替换为:**
```java
.setOnClickListener(new DebounceClickListener() {
@Override
public void onDebouncedClick(View v) {
```
**注意:** 需要手动添加对应的结束括号 `});`
## 特殊情况处理
### 1. Lambda表达式单行
```java
// 之前
button.setOnClickListener(v -> finish());
// 之后
button.setOnClickListener(new DebounceClickListener() {
@Override
public void onDebouncedClick(View v) {
finish();
}
});
```
### 2. 已有变量引用
```java
// 之前
View.OnClickListener listener = v -> doSomething();
button.setOnClickListener(listener);
// 之后
View.OnClickListener listener = new DebounceClickListener() {
@Override
public void onDebouncedClick(View v) {
doSomething();
}
};
button.setOnClickListener(listener);
```
### 3. 在Adapter中使用
```java
// 在ViewHolder的bind方法中
public void bind(Item item) {
itemView.setOnClickListener(new DebounceClickListener() {
@Override
public void onDebouncedClick(View v) {
if (onItemClickListener != null) {
onItemClickListener.onItemClick(item);
}
}
});
}
```
## 测试建议
添加防抖后,建议测试以下场景:
1. 快速连续点击按钮,确认只触发一次
2. 正常点击间隔(>500ms确认每次都能触发
3. 不同防抖时间的按钮,确认各自独立工作
4. 列表滚动时点击,确认不会误触发
## 注意事项
1. **不要对所有点击都添加防抖**:某些场景(如音乐播放器的快进/快退)不适合防抖
2. **防抖时间要合理**默认500ms适合大多数场景但某些场景可能需要调整
3. **保持一致性**:同类型的操作使用相同的防抖时间
4. **测试充分**:添加防抖后要测试各种点击场景
## 进度追踪
- ✅ 已完成WorkDetailActivity.java
- 🔄 进行中其他Activity
- ⏳ 待处理Adapter类
最后更新2024-12-24