목록

    [Android] 시스템 설정 변경 처리하기

    안드로이드 애플리케이션 개발 시 다양한 상황에서 기기 설정 변경이 발생할 수 있다. 이러한 상황에 대응하기 위해 안드로이드에서는 onConfigurationChanged 콜백 메서드를 제공한다. onConfigurationChanged란?onConfigurationChanged는 기기의 설정이 변경될 때 호출되는 메서드다. 대표적인 설정 변경 예로는 화면 회전, 화면 크기 변경, 키보드 타입 변경, 언어 설정 변경 등이 있다. 이러한 변경 사항이 발생할 때, 시스템은 해당 액티비티의 onConfigurationChanged 메서드를 호출한다.onConfigurationChanged의 사용법기본적으로, 설정 변경이 발생하면 안드로이드 시스템은 현재 액티비티를 종료하고 새로운 설정을 반영하여 재시작한다. 하..

    [Android] ViewModel에서 LiveData와 StateFlow의 권장 사용 방법

    안드로이드 프로젝트를 개발하면서 ViewModel을 사용할 때, LiveData 혹은 StateFlow를 활용하여 데이터 변경을 관찰하고 UI에 반영한다.이때 Mutable 변수는 private으로 설정하고 이름 앞에 _를 붙이고, 외부에 노출되는 변수는 Immutable로 사용하는 것을 흔히 볼 수 있다.일반적인 코드 컨벤션이라고 생각할 수도 있지만, 좀 더 생각해 보면 객체지향 설계 원칙과 클린 코드 관점에서 중요한 이유가 있다.권장 이유1. 캡슐화 (Encapsulation)캡슐화는 객체지향 설계의 기본 원칙 중 하나로 데이터를 직접 접근하지 못하게 하고, 데이터에 대한 접근을 제한하며, 변경을 메서드를 통해서만 할 수 있도록 한다. MutableLiveData나 MutableStateFlow를 p..

    [Android] OS 10 이상에서 알림 갯수 제한 문제 해결

    안드로이드 OS 10부터 특히 삼성 단말에서는 알림을 24개까지만(삼성 단말 기준) 노출할 수 있고, 그 이후에 생성된 알림은 무시되는 문제가 발생할 수 있다. 이를 해결하기 위해 가장 오래된 알림부터 순차적으로 삭제하면서 새로운 알림을 보여주는 방법을 공유한다.문제 상황알림이 24개를 초과하게 되면 새롭게 생성되는 알림은 사용자에게 표시되지 않는다. 이는 새롭게 발생되어야 하는 알림이 사용자에게 전달되지 않는 문제를 야기할 수 있다.해결 방법가장 오래된 알림부터 삭제하고 새로운 알림을 추가하는 방법으로 해결해보려고 한다.이를 위해 알림 ID를 관리하고, 알림을 생성할 때마다 알림 ID를 순환시키는 방식으로 오래된 알림을 삭제한다.구현 방법1. 알림 ID 관리알림 ID를 관리하기 위해 큐(Queue) 자..

    [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..