프레그먼트에서 DataBinding 또는 ViewBinding 사용시 메모리 누수와 해결방법

  프로젝트 팀원중 한분이 Databinding(or ViewBinding)과 관련된 메모리 누수를 LeakCanary를 통해 발견 했다고 리포팅해주셨다. 메모리 누수가 발생했다! DataBinding을 사용한지 벌써 꽤 많은 시간이 지났는데, 난 계속 메모리 누수 코드를 작성하고 있었던 것인가.. ViewBinding 공식 문서에 예제 코드를 살펴보면 다음과 같다. private var _binding: ResultProfileBinding? = null // This property is 더보기…

글쓴이 Charlezz,

Dagger2 사용 시, XXX is defined multiple times 에러가 발생한다면

Dagger2는 관련된 MembersInjector 및 Factory 패키지를 올바른 패키지 경로에 생성하게 된다. 다음 그림은 안드로이드 프로젝트의 모듈간 의존성을 보여준다. 만약 안드로이드 프로젝트가 멀티 모듈로 구성되어 있고 모듈별로 Dagger2 어노테이션 프로세싱이 수행된다면, 모듈별로 각자 생성된 클래스를 갖게 되므로 중복된 클래스를 갖게 된다. 이렇게 되면 debug 빌드시에는 이를  괜찮은 듯 보이나, 릴리즈 빌드시 더보기…

글쓴이 Charlezz,

Paging 3 라이브러리 완벽 가이드 (공식 문서 번역)

개요 페이징 라이브러리를 사용하면 로컬 저장소 또는 네트워크를 통해 큰 데이터를 잘게 쪼개어 로드하고 표시 할 수 있다. 이 방식을 사용하면 앱에서 네트워크 대역폭과 시스템 리소스를 더 효율적으로 사용할 수 있다. Paging3 라이브러리 컴포넌트 Android 앱 아키텍처에 맞게 설계되고 다른 Jetpack 구성 요소와 깔끔하게 통합되며 Kotlin 우선 지원을 제공한다. 장점 더보기…

글쓴이 Charlezz,

로딩속도가 가장 빠른 안드로이드 이미지 피커 라이브러리 Pickle!!

Let’s Pickle 로딩속도에 초점을 맞춘 안드로이드 이미지 피커 라이브러리를 배포했습니다. Instagram 및 Facebook과 같은 타사 앱보다 월등히 빠른 로딩속도를 보여줍니다. 퍼포먼스 비교 영상 참고 (소리주의!) 설정 앱 모듈의 build.gradle에 다음 내용을 추가합니다. 최신버전 : allprojects { repositories { … maven { url “https://jitpack.io” } } }   dependencies { implementation 더보기…

Parcelable을 자동으로 구현해주는 @Parcelize에 대해 알아보자.

@Parcelize kotlin-parcelize 플러그인은 Parcelable 구현을 자동으로 해준다. 새로운 클래스를 생성도 필요 없고 @Parcelize 어노테이션을 추가하는 것만으로 직접 Parcelable 관련 코드를 작성 한 것과 같이 동작한다. 컴파일타임에 바이트 코드 변조를 하기 때문에 추가되는 메서드 및 런타임시 오버헤드 비용도 발생하지 않는다. 그리고 무엇보다 이 플러그인은 구글과 JetBrains가 협업하여 만든 플러그인이기 때문에 다른 더보기…

SingleLiveEvent 개선하여 더블 클릭 방지 하기!

SingleLiveEvent 개선하기 개요 SingleLiveEvent에 대한 설명은 이전 포스팅을 참조하자. Jetpack 라이브러리의 Android Arhitecture Component의 등장이후로 ViewModel과 LiveData를 열심히 사용중이다. View에 대한 ViewModel의 의존관계를 완벽하게 끊어냄으로써 기존에 사용하던 이벤트 처리 방식을 변경 해야 했다. 이벤트 리스너를 뷰컨트롤러(Activity/Fragment)에 구현하는 방식을 많이 사용했는데, ViewModel은 메모리 누수등의 이유로 Context의 참조를 엄격하게 금지하고 있다. 그러므로 더보기…

글쓴이 Charlezz,

안드로이드의 Context를 이해하고, 메모리 누수를 방지하기

안드로이드의 Context란 무엇일까? Context란 사실 단어 그대로 맥락(Context)을 의미하며, 현재의 상태를 나타낸다. 다음 내용을 읽어보면 좀 더 Context를 이해하는데 도움 될 것 같다. Context에 대한 중요한 몇 가지 사실들! Application의 현재 상태를 Context를 통해 표현한다. Activity 그리고 Application의 정보를 Context를 통해 얻을 수 있다. Context를 활용하여 Resource, Database, SharedPrefernces 등의 더보기…

글쓴이 Charlezz,

안드로이드 Paging3 컴포넌트 정복하기 – Part2 (네트워크에서의 페이징과 로컬 데이터 캐싱)

안드로이드 Paging3 컴포넌트 정복하기 – Part2 지난 Part1 에서는 Paging3 전반적인 내용과 PagingSource를 통해 네트워크로부터 페이징 된 데이터를 로드하고 화면에 나타내는 방법에 대해서 살펴보았다. 이번 포스팅에서는 오프라인 상태 또는 커넥션이 불안정한 상태에서도 앱 사용성을 보장하여 향상된 사용자 경험을 제공하는 방법에 대해서 알아본다. 페이징을 하는 방법은 네트워크와 로컬 데이터베이스로부터 동시에 페이징을 더보기…

글쓴이 Charlezz,

안드로이드에서 LruCache를 파헤치기

LruCache란? 면접 또는 코딩테스트에서 흔히 접할 수 있는 주제가 바로 LruCache다. 안드로이드에서는 LruCache가 어떻게 동작하고, 언제 그리고 어디서 사용되는지 한번 알아보도록 하자. LruCache에서 Lru란 Least Recently Used(최근에 가장 적게 참조됨)의 약자다. 그러므로 즉, LruCache는 제한된 사이즈에서 참조(set or get)된지 가장 오래된 객체를 제거하는 데이터구조다. 그러므로 LruCache를 사용할때는 자주 참조되는 객체일 더보기…

글쓴이 Charlezz,