본문 바로가기

Android

커스텀 콜백 ( 리스너) 만들기 개발하면서 콜백 스타일의 코드들을 많이 보셨을 텐데요. 예를들면 서버의 API 호출 후 Response 데이터를 가져올 경우나, 스마트폰 자체 내에서는 사용자가 어떤 위젯을 터치 하고나서의 이벤트가 발생할 때 클릭 리스너가 동작하게 되어있습니다. 서버사이드에서 많이쓰는 NodeJS 의 경우에도 싱글 스레드의 비동기 방식의 콜백 기반으로 개발을 하게 됩니다. 개발을 하다보면 보통 특정한 함수 또는 이벤트를 발생시키고 어떤 그 뒤에 따르는 리스너? 콜러? 가 필요한 경우가 있습니다. 근데 심지어 다른 클래스에서 어떤 프로세스를 진행하고 끝나는 결과로 콜백을 부르는 경우도 많이 생깁니다. 이럴 때 보통 저는 3가지의 케이스로 개발을 하고있습니다. 1. 다른 액티비티를 실행 후 결과로써 진행해야할 경우. => .. 더보기
안드로이드 개발시 유용한 필수? 라이브러리 추천 (Kotlin 업데이트) 대부분 알고 계시겠지만 앱개발하는데 있어서 유용한? 거의 꼭 필요한? 라이브러리를 소개합니다. 1. Glide -이미지 로딩 라이브러리. 여러 이미지 로딩 라이브러리 들이 존재하지만 속도가 매우 빠르며, 모양의 변형 (원모양, 사각모양 등), 여러 부가기능을 제공해준다. 기타 여러 이미지 로딩 라이브러리는 많음. ( picasso, AUIL, Fresco 등 ) - (참고) https://github.com/bumptech/glide- (참고 - 안드로이드에서 이미지 로딩 라이브러리 순위를 매겨놓은 사이트 )https://ourcodeworld.com/articles/read/929/top-10-best-android-image-loading-and-caching-libraries 2. Retofit -.. 더보기
AlertDialog 로 리스트 팝업 만들기 앱을 개발하다보면 어떤 다른 앱 또는 기본 제공 UI 와의 차별점을 두기위해 각 앱에 맞는 위젯을 만들어 쓰곤 합니다. 크게 어려운 것은 아니지만 간단한 팁 아닌 팁을 적어봅니다. 목표 : List형태의 선택 팝업. 그리고 리스트 내부의 각 row item view 를 커스터마이징 할수 있게 한다. 방법 : 1. 기본 위젯인 AlertDialog 를 이용한다. 2. AlertDialog.Builder.setItems() 가 아닌 AlertDialog.Builder.setAdapter() 를 적용한다. setItems 를 사용하게되면 기본 제공해주는 List 팝업이 된다.3. setAdapter 의 매개변수인 ArrayAdapter 를 필요에 맞게 ArrayAdapter를 상속한 customAdapter를.. 더보기
EditText 사용시 키보드 보이기 최근 특이한 현상이 발견되었네요. ㅎㅎ 화면에 EditText 를 사용시 기본적으로 커서가 focus되면서 화면이 열리게 됩니다. 근데 제가 원한 것은 커서와 동시에 키보드가 올라오길 바랬습니다. 하지만 아무리 해도 커서는 잡히는데 키보드가 보여지지 않았습니다. StackOverFlow 에 찾아보면 죄다 InputMethodManager 를 이용해서 키보드를 show하는 해결책이 나왔지만 역시 원하는데로 되지 않았습니다. 해결방법 : 부모 레이아웃을 ScrollView로 감싸주어 내부 레이아웃 자식으로 EditText를 두게 되면 자동으로 커서가 잡히면서 키보드가 올라오는 것을 확인 할 수 있음. 추가 Tip)ScrollView 사용하면서 자식 레이아웃에 match_parent 를 주었는데도 화면을 꽉 .. 더보기
Memory Leak 에 관하여 앱을 출시 하고나서 관리 하다보니 겪은 일이었습니다. 앱이 버벅대고 느려진다는 이슈였습니다. 굉장히 크리티컬한 이슈였지요. 원인을 찾아보니 OOM(OutOfMemory Exception) 에러였습니다. 허용 가능한 메모리가 꽉 차서 앱이 죽는 현상이 발생하는 것이었습니다. 이 원인을 해결하기위해 엄청나게 많은 시간을 쏟아부었습니다. 앱 내에 이미지를 보여주는 부분이 많았는데, 용량이 큰 이미지를 불러오거나 할 때 제대로 GC (Garbage Collect)가 되지않아서 메모리에 지속적으로 쌓이는 것이었습니다. 하지만 원인자체가 이미지 문제가 아니었습니다. 원인은 객체의 참조로 인해 화면 종료시 GC가 제대로 되지 않으면서 계속적으로 Activity 객체들이 쌓이게되고 큰 이미지를 가지고 있는 Activi.. 더보기
프로가드(Proguard), Retrofit 사용시 주의할 점 앱 출시후 굉장히 당황스런 상황이 있었습니다. 올리기 전 테스트할 때는 정상적으로 모든 기능이 잘 되던 것이 출시 후 기능이 아무것도 안되던 현상이었습니다. 원인으로는 프로가드(Proguard) 적용한 것이 문제였습니다. Retrofit을 사용시 Response 값으로 앱 내에서의 Beans 들의 변수 명에 맞게 매핑이 되도록 되어있는데, 프로가드를 적용하면서 앱 내의 Beans 들의 변수명이 다 바뀌면서 서로 매핑이 되지 않아서 발생하는 오류였습니다. 그래서 해당 Beans들이 있는 패키지 경로를 프로가드(Proguard) 예외에 추가하여 해결하였습니다. Retrofit과 프로가드(Proguard) 사용시 참고하셨으면 좋겠습니다. 더보기
Null 체크를 꼭 해야하는가 출시 후 또는 개발 하면서 항상 겪는 Crash Error 중 제일 많은 부분이 NullPointerException 오류였습니다. 처음 앱을 개발할 때에는 Null 체크를 제대로 하지 않은 채 기능의 동작여부만 확인 및 테스트 후 바로 출시 하곤 했습니다. 우선 이런식으로 개발을 하면 기본적으로 서버 측(Back-End) 과 클라이언트(Front-End) 측의 거의 발생하지 않는? 이슈 ( 트래픽 증가로 인한 서버 다운, 빈 데이터나 또는 null 데이터의 통신 등) 가 발생하지 않는다면 큰 문제가 없이 유지가 됩니다. 하지만 이런 상황들은 꼭 출시 후 일어나서 당황스러운 상황이 발생합니다. 서버측에서 보내는 json데이터가 조금만 바뀌어도 에러가 발생하는 상황이 발생할 수도 있습니다. 따라서 내린 결.. 더보기
Android architecture 앱을 처음에 설계하는 데 있어 좋은 참고 링크가 있어 공유합니다. 참고하세요. (참고) http://kimjihyok.info/2017/05/29/안드로이드에서-clean-architecture의-흔적과-장점/ 더보기