Android

    [Android] DiffUtil과 Payload를 활용한 RecyclerView 성능 최적화

    안드로이드에서 안 쓰는 앱을 더 찾기 힘들 정도로 자주 사용되는 RecyclerView는 매우 유용하면서도 늘 성능 최적화를 고려해야 하는 리스트뷰다.성능 최적화 방법에는 여러 가지 접근 방식이 존재하겠지만, 가장 기본적이고 쉽게 RecyclerView의 성능을 최적화하는 방법이 있다.결론부터 말하자면 리스트의 아이템에 변경사항이 있을 때 전체 리스트를 갱신하는 대신, DiffUtil의 payload를 활용하여 변경된 부분만 업데이트하는 방법으로 RecyclerView의 성능을 크게 향상할 수 있다.만약 RecyclerView에 대량의 데이터가 노출되고 있을때, 리스트의 아이템이 빈번하게 변경될 때마다 전체 리스트를 갱신하는 방식은 비용이 매우 크며 성능 저하에 큰 영향을 미치게 된다.DiffUtil은 ..

    [Android] RecyclerView 성능 최적화를 위한 ListAdapter 살펴보기

    요즘 RecyclerView를 위한 Adpater를 구현할 때는 주로 RecyclerView.Adapter보단 ListAdapter를 상속받아 구현한다.ListAdapter는 androidx.recyclerview 패키지에 소속되어 있고 RecyclerView.Adapter를 확장한 클래스로 AsyncListDiffer를 통해 리스트 데이터를 비교하여 반영한다.ListAdapter의 생김새를 알아보자.public abstract class ListAdapter extends RecyclerView.Adapter { final AsyncListDiffer mDiffer; protected ListAdapter(@NonNull DiffUtil.ItemCallback diff..

    [Android] Notification 커스텀하기

    기본적으로 여러 Android 버전에서 알림이 잘 보이도록 하려면 표준으로 제공하는 Notification 템플릿을 사용하는게 가장 좋다. 하지만 요구사항에 의해 기본 템플릿 말고 직접 커스텀한 레이아웃으로 Notification을 구현할 수 있다. 중요한 점은 직접 커스텀한 레이아웃을 적용하기 위해 Notification style 속성에 NotificationCompat.DecoratedCustomViewStyle을 적용해주어야 한다. 이제 순서대로 커스텀 Notification을 적용하는 방법을 알아보자. NotificationCompat.Builder로 기본 Notification을 생성한다. 생성한 Notification 객체의 setStyle()을 호출하여 NotificationCompat.D..

    [Android] Activity와 Fragment

    Activity Activity는 안드로이드의 컴포넌트 중 하나로 사용자와 상호작용을 담당하는 단일화면으로 위 이미지와 같은 Lifecycle을 갖는다. Activity의 생성부터 종료되기까지 일련의 모든 이벤트들에 대한 콜백을 지원해주기 때문에 상황에 맞는 로직을 구현할 수 있다. 이러한 이점을 통해 각 상태별로 리소스를 관리 포인트를 고려하여 메모리 누수에 대한 위험을 방지해야 한다. Activity LifeCycle의 각 콜백에 대해 알아보자 onCreate() - 시스템이 Activity를 생성할때 실행하는 콜백으로 해당 Activity가 실행되면서 한 번만 실행해야 하는 로직들을 이곳에 구현하면 된다. 예를 들면 View 바인딩 작업이나 ViewModel을 연결하는 작업들이 이곳에서 이루어지면 ..

    [Android] URI, URL

    URI URI는 특정 리소스를 식별하는 통합 자원 식별자(Uniform Resource Identifier). 웹 기술에서 사용하는 논리적 또는 물리적 리소스를 식별하는 고유한 문자열 시퀀스. URL URL은 흔히 웹 주소라고도 하며, 컴퓨터 네트워크 상에서 리소스가 어디 있는지 알려주기 위한 규약. URI의 서브셋이다. 요약하면 URI는 식별하기 위함이고, URL은 위치 정보이다.

    [Android] Vector 이미지

    Android 스튜디오에서 SVG(Scalable Vector Graphic) 파일을 Vector 리소스로 사용할 수 있도록 Vector Asset Studio 도구를 제공한다. Vector 이미지를 사용하면서 얻는 이점은 여러 해상도에 대응할 필요 없이 하나의 이미지로 화질 손실 없이 다른 화면 밀도에 맞게 크기를 조정할 수 있기 때문에 리소스로 관리로 인한 앱의 크기를 줄일 수 있다. 하지만 Android 4.4(API 20) 이하의 기기에서는 Vector 리소스 사용을 지원하지 않기 때문에 하위 호환에서 문제가 생길 여지가 있다. Vector를 사용하는 것은 단순한 아이콘 표현에 적합하다. 왜냐하면 다른 리소스 표현 방식보다 처음 이미지를 로드할때 CPU 사이클이 더 소모되기 때문에 최대 200 X..