도리안의 2024년 개발기 #155 - 오늘 수정한 학습 설정 화면의 크래쉬 이슈

오늘 수정한 학습 설정 화면의 크래쉬 이슈

No. 155
2024. 09. 03 (화) | Written by @dorian-dev

오늘의 개발기

안드로이드 타겟 버전을 34로 올려야 하는 유지보수 작업이 있었다. 지난달 중순에 버전업을 했던 앱에서 크래쉬 이슈가 발견되었다. 이것은 구글 플레이 콘솔의 '비정상 종료 및 ANR' 메뉴를 통해 보고된 것이다. 재현 시도 결과, 학습 설정 화면에 진입하자마자 그것이 죽는 것을 확인했다. 내용을 보니 NullPointerException이었다. 뷰(view)에 접근하기 위해 정의한 토글 버튼 변수의 값이 null이었던 거다. 화면이 시작하자마자 그것을 사용하려는 코드가 있고, 그 시점에서는 그 변수가 아직 null이었던 것이다. 이 버그는 화면이 시작하자마자 바로 그 변수의 값을 설정하는 것으로 해결되었다.

이 화면의 상황을 좀 더 자세히 설명해 보겠다.

화면 레이아웃

(1) 스위치 버튼이 있다.
(2) 그 아래 토글 버튼이 3개 있다.
(3) 스위치 버튼이 켜지면, 토글 버튼들은 활성화 된다.
(4) 스위치 버튼이 꺼지면, 토글 버튼들은 비활성화 된다.

화면 초기화

(5) 스위치 버튼에 접근할 변수를 정의한다.
(6) 스위치 버튼의 on/off 변경을 처리하는 리스너를 설정한다.
(7) 토글 버튼에 접근할 변수를 정의한다.

(6)에서 스위치 버튼들의 on/off를 체크하여 토글 버튼들의 활성화 여부가 결정된다. 그런데 (7)이 아직 완료되지 않아 토글 버튼 변수들이 아직 설정되지 않았다. 리스너에서는 값이 아직 null인 토글 버튼 변수에 접근하기 때문에 NullPointerException이 발견된 것이다.

해결

위 화면 초기화의 순서를 (5), (7), (6)으로 변경하였다.

한가지 의문점

이 앱의 예전 개발자가 이 버그를 알았을까? 몰랐을까? 일정상 바쁜 이유로 알고도 넘어갔을 가능성이 있다. 아니면 버그를 알았지만 퇴직하기로 해서 고치지 못하고 떠났을 수도 있다. 뒤늦게라도 알았으니 수정한다.

교훈

findViewById 메소드를 호출하여 뷰에 접근하는 코드는 가능한 가장 일찍 실행하는 것이 좋지 않을까...


지난 2024년 개발기


Layout provided by Steemit Enhancer hommage by ayogom


Posted through the ECblog app (https://blog.etain.club)
Sort:  

안녕하세요.
SteemitKorea팀에서 제공하는 'steemit-enhancer'를 사용해 주셔서 감사합니다. 개선 사항이 있으면 언제나 저에게 연락을 주시면 되고, 관심이 있으신 분들은 https://cafe.naver.com/steemitkorea/425 에서 받아보실 수 있습니다. 사용시 @응원해 가 포함이 되며, 악용시에는 모든 서비스에서 제외될 수 있음을 알려드립니다.


안녕하세요.
이 글은 SteemitKorea팀(@ayogom)님께서 저자이신 @dorian-dev님을 응원하는 글입니다.
소정의 보팅을 해드렸습니다 ^^ 항상 좋은글 부탁드립니다
SteemitKorea팀에서는 보다 즐거운 steemit 생활을 위해 노력하고 있습니다.
이 글은 다음날 다시 한번 포스팅을 통해 소개 될 예정입니다. 감사합니다!

Upvoted! Thank you for supporting witness @jswit.

🤩 "Wow, great troubleshooting skills shown here! 👍 I'm loving the step-by-step explanation of the issue and how you fixed it 😊. The lesson learned about initializing views early is super valuable 📚. Can't wait to see more dev stories like this! 💻 Would love to hear from others in the community - what have been some tricky issues you've encountered? 💬 And, as always, thanks for sharing your expertise with us all 👍! P.S. If you're not already a witness voter, be sure to head over to https://steemitwallet.com/~witnesses and give xpilar.witness your support 🤝!"

Coin Marketplace

STEEM 0.17
TRX 0.15
JST 0.028
BTC 60004.45
ETH 2418.44
USDT 1.00
SBD 2.43