Skip to content

Conversation

@noion0511
Copy link
Contributor

@noion0511 noion0511 commented Aug 13, 2023

Summary

1초 안에 여러번 클릭해서 발생하는 오류제어를 위해서 버튼 클릭을 1초에 1회로 한정

Describe your changes

게시글 작성, 댓글 작성, 좋아요 기능에 적용했습니다.

abstract class DebouncingClickListener(private val delayMillis: Long = 1000L) : View.OnClickListener {

    private var lastClickTimes = mutableMapOf<View, Long>()

    final override fun onClick(v: View) {
        val currentTime = System.currentTimeMillis()
        val lastClickTime = lastClickTimes[v] ?: 0L

        if (currentTime - lastClickTime > delayMillis) {
            lastClickTimes[v] = currentTime
            onDebouncedClick(v)
        }
    }

    abstract fun onDebouncedClick(v: View)
}

클릭 리스너를 커스텀해서 1초에 한번만 누를 수 있도록 했습니다. 과도한 클릭을 제어해야하는 다른 부분에도 적용하면 좋을 것 같습니다.

To Reviewers

바쁜 와중에 감사합니다.
그리고 2버전으로 올린거 깜빡하고,, 브랜치 이름이 1.입니다... 죄송합니다.

- 1초 안에 여러번 클릭해서 발생하는 오류제어를 위해서 버튼 클릭을 1초에 1회로 한정
@noion0511 noion0511 changed the title [HOTFIX] 1.0.4.1 버전 업데이트 [HOTFIX] 2.0.1 버전 업데이트 Aug 13, 2023
@DodoKim0425
Copy link
Collaborator

DodoKim0425 commented Aug 31, 2023

클릭 리스너를 오버라이딩 해서 1초에 한번만 클릭되도록 만들었군요 오버라이딩으로 클릭이 되는 방식을 바꿔볼 생각은 못했는데 멋져요! 새로운 활용 방안을 알게되어서 기쁘네요 감사합니다!
하지만 해당 코드 풀 받아서 테스트 해본 결과 수정 전 코드보다는 발생 빈도가 적지만 동일한 문제가 발생함을 발견하였습니다.
image
위 이미지는 좋아요 버튼을 매우 빠르게 연속해 클릭했을때의 모습입니다
KakaoTalk_20230831_214731581
위 이미지는 테스트 당시 와이파이 속도입니다
아마 네트워크 상태가 좋지 않은 경우에 1초 안에 모든 처리가 다 되지 않아 같은 문제가 발생하는것 같습니다.
api 요청 후 리스폰스 값이 되돌아 왔을때 클릭이 다시 가능하도록 변경해보는것은 어떨까요?
그리고 늦게 확인해서 죄송합니다

@noion0511
Copy link
Contributor Author

@DodoKim0425
말씀해주신 방식을 1차적으로 고려했습니다. pi 요청 후 리스폰스 값이 되돌아 왔을때 클릭이 다시 가능하도록 변경한다면 문제점들이 있었습니다.

  1. 리스폰스가 되돌아오지 않을 경우, 계속 클릭이 불가능한 문제가 있습니다. 그리고 클릭이 불가능한 상태인지를 UI로 표시를 해줘야하는지도 고민입니다. 일정 시간 초 이후에 어떻게 처리를 할 것인지도 상의가 필요합니다.
  2. 200으로 돌아오지 않는 경우, 서버 또는 클라이언트에 문제가 있는 부분인데 클릭이 다시 가능하도록 할 것인지에 대해서도 상의가 필요합니다.
    어떤 방식으로 구현할지는 이후 같이 정해봐요:)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants