본문 바로가기

안드로이드 Android

안드로이드 개발 시 실수 모음

안녕하세요 Loner 입니다. 언제나 열심히 앱 개발 작업중 입니다. 정신 차려보니 벌써, 추석 명절을 맞았고 앱개발 때문에 시간이 항상 바빳지만 오랜만에 여유가 생겨서 블로그를 작성합니다. 명절 이벤트로 안드로이드 개발하면서 한번쯤 경험 할 수 있는 실수들을 모아봤습니다. 

 

제 경험과 함께, 다른 안드로이드 개발자님들의 의견을 모아서 만들어봤습니다. 

0. Manifest.xml

- 필요한 permission을 추가 안함
- Activity의 export를 추가안함 

- useClearTextTraffic 설정을 하지 않아서 삽질

- Service나 receiver 클래스를 만들어두고 manifest 에 설정 안함

 

1. RecyclerView 사용시

- 어댑터, xml , 로직 다 멋지게 만들었으나 layoutManager를 쓰지 않음

- 아이템 height를 match_parent로 지정

- nested scrollview 안에서 recyclerView의 height 를 wrap_parent로 지정하면 재활용을 하지 않고 항상 만들어냄

- onBindViewHolder() 에서 데이터 기준으로 UI 갱신을 하는것이 아니라 아이템 뷰 자체의 속성을 바꿧을 때 스크롤 시 recyclerView 재생성으로 인해 아이템 포지션에 맞지 않는 뷰 속성을 그대로 가져옴 (재생성 이슈)


2. 데이터바인딩 & 뷰바인딩 사용시 

- 데바 뷰바 사용시 화면과 맞지않는 바인딩된 클래스를 사용할수 있음
- 데바 사용시 xml 타입 불일치 
- 데바 사용시 xml 변수의 pojo클래스의 위치가 바뀌어도 자동으로 바뀌지 않음
- 데바 사용시 3항 연산자로 비지빌리티 사용시 의도하지 않는 뷰에 사용했거나 결과가 반대로 나옴

- 데바 사용시 excutePandingBindings() 함수를 사용 안해서 UI갱신이 느림

 

3. Room 사용시

- DAO 쿼리 작성시 :변수명 에서 :를 빼먹음

- Room의 디비구조 변경시 데이터베이스 버전업을 안함

- 로컬 데이터베이스 (sqlite,room..) 정보를 수정했을때 기존앱 데이터 유지 되는거 몰라서 삽질

- 코루틴으로 사용시 룸의 DAO 함수 관련 처리시 백그라운드 쓰레드를 안써서 에러 

 

4. Hilt 사용시

- AndroidEntryPoint, HiltViewModel 주석을 항상 까먹음

 

5. Dialog 사용 시 

- show() dismiss() 셋팅을 자주 까먹음

 

6. Gradle 

- dependency 적고 싱크 안하기

 

7. 데이터 공유 

- 인텐트로 데이터 공유시 pojo data인 경우 해당 모델에 직렬화 관련 implements 를 안함

- 데이터 공유시 key값을 상수 식별자로 해놓지 않아서 key 오타로 인한 데이터 공유 실패

 

8. 배포 관련

- 내부 DB 에 R.drawable.xxx 저장 0 버전 배포 이후에 업데이트 된 1버전에서 저장된 R.drawable.xxx 꺼내쓰면 다른 리소스가 보임
(리소스는 내부적으로 R파일로 관리되는데, 배포될 때마다 변경 됨)

 

9. gson

- gson 사용시 serializationName 을 적지 않아서 프로가드 적용시 name 이 지워져 에러

 

10. Fragment

- Fragment 를 fragmentManager 로 처리하지 않고, 프로퍼티 혹은 멤버변수로 두고 사용

- Fragment를 tag로 강제호출해서 사용

- 프래그먼트에서 뷰바인딩할때 return binding.root 까먹음 

 

11. ViewModel

- viewModel 에서 context 사용 혹은 리소스 아이디를 직접적으로 사용 R.string.xxx

 

12. Glide

- glide 캐싱 되는줄 모르고 이미지 왜 안 바뀌는지 답답해함

13. 기타

- 수많은 listener 들 register 하고 unRegister 안하는 경우

- 카카오 로그인 할 때 applicationContext 사용 

 

- grid형식의 리싸이클러뷰 span count를 xml 와 kotlin code 양쪽에 설정을 해놓고 kotlin code 설정으로 만들고 싶었으나 xml span count으로만 설정이 되서 원인 파악하는데 삽질

 

- shared viewmodel을 fragment에서 각각 선언해놨었는데 shared가 되지 않음

(Koin 을 쓰고있어서 by sharedViewModel<SharedViewModel>()로 해야되는데 by viewModel<SharedViewModel>()로 했었음)

 

- 내일 마저 작업해도 되는데 오늘 끝내겠다고 야근 

- 일정 무리수 인데 일단 할 수 있다고 지르기 

- 안드로이드 자동생성 파일 git에 업로드 

- 뒤로가기 버튼 클릭리스너 구문을 자주 빼먹음  

- res 에서 대문자 및 허용되지 않는 특수문자 사용 
- 한글 경로로 인한 이슈
- Amd cpu 이슈로 인한 hiper-v 설치 실패

 

-  xml 에서 잘못된 문법 사용 예시: 

<TextView>
    <EditText>
</TextVIew>

 

- startActivity 할 때 applicationContext 를 사용하는 경우 (백스택 문제 생길 여지있음)

-분명 MVVM으로 클래스는 나누긴 했으나 로직 분포된 건 MVVM이 아닌 경우

 

의견 주신 홍드로이드, 현썽, 이현우님, 레몬, 휴, 코린이, 신입입니다, 예슬님, 도마, Moon SungJun, betty, 케니스 여러분들 모두 감사합니다. 즐거운 한가위 잘 보내시길 바랍니다!