Android

[Android] Gradient 배경 만들기
Drawable xml을 아래와 같이 정의하여 Gradient Background를 정의할 수 있다. gradient의 속성 값들에 대한 설명은 아래와 같다.- type : linear(기본값), radial, sweep - angle : gradient의 기준 방향을 나타내며 원하는 각도를 정의함. - endColor : gradient의 끝 색상 - centerColor : gradient의 중간 색상 - startColor : gradient의 시작 색상 - gradientRadius : gradient의 반지름 값. type이 'radial'인 경우에만 적용 가능.

[Android] RecyclerView DiffUtil
정의 RecyclerView에 현재 보이고 있는 Item에 변경이 일어날 경우 notifyItemChanged()를 통해 변경을 알려 새로고침을 해야 한다. 하지만 이 메소드를 통한 변경 알림은 adapter가 새로운 item 인스턴스를 생성하기 때문에 비용이 많이 들게 된다. 이러한 비효율적인 작업을 줄이고 합리적인 Item 변경을 위해 DiffUtil이 개발되었다. 이 클래스는 이전 목록과 새로운 목록 간의 차이점을 찾고 업데이트가 필요한 목록을 찾아 반환하여 RecyclerView의 adapter에 업데이트를 알린다. 위 동작의 기반은 Eugene W.Myers의 차이 알고리즘을 적용하여 최소한의 업데이트 수를 계산한다. 사용법 DiffUtil.Callback은 추상 클래스로 위에서 언급한 두 목록..

[Android] Context
Context는 어플리케이션 환경에 대해 글로벌 정보를 갖는 일종의 인터페이스로써 android 시스템에서 구현체를 제공하는 추상 클래스로 어플리케이션 별 리소스 및 클래스 접근에 사용되며, Actvity 실행, BroadCast, Intent 수신 등 어플리케이션 수준의 작업에 사용된다. Context의 역할을 요약해보면 아래와 같다. 어플리케이션의 현재 상태를 나타낸다. 액티비티와 어플리케이션의 정보를 얻기 위해 사용할 수 있다. 리소스, 데이터베이스, shared preference 등에 접근하기 위해 사용한다. 액티비티와 어플리케이션 클래스는 Context 클래스를 확장한 클래스다. Context는 여기서 두 종류로 나눠 볼 수 있다. - Application Context - Activity C..

[Android] Serializable과 Parcelable
Serializable? Serializable은 표준 Java 인터페이스로 이 인터페이스를 구현한 클래스의 객체는 한 액티비티에서 다른 액티비티로 이동할 수 있다. Serializable은 해당 클래스가 직렬화 대상이라고 알려주기만 할뿐 어떤 메소드도 가지지 않는 단순한 '마커 인터페이스' 이기 때문에 사용 자들이 쉽게 접근할 수 있다. 하지만 그만큼 시스템 비용이 비싸다. Serializable은 내부에서 Reflection이 일어나며 직렬화를 처리하는데, 이 Reflection은 프로세스 동작 중에 사용되며 처리 과정 중에 많 은 추가 객체를 생성한다. 생성된 많은 추가 객체들은 가비지 컬렉터를 낭비시키고 이로 인해 성능 저하를 일으킨다. class Person : Serializable{ priv..

[Android] Mac M1 Room 라이브러리 에러
M1을 탑재한 맥북프로가 출시되고 나서 안드로이드의 Room 라이브러리로 인해 프로젝트가 빌드되지 않는 현상이 발생했다. 다행히 구글에서 해당 버그를 수정한 버전이 있어 stable 버전은 아니지만(현재는 Stable함) 해당 에러를 고칠 수 있었다. def room_version = "2.4.0-alpha03" 2.4.0-alpha03 버전 이상을 사용하면 에러를 해결할 수 있다. https://developer.android.com/jetpack/androidx/releases/room

[안드로이드] Android Architecture Components(AAC)의 LiveData
개요 LiveData는 Activity, Fragment, Service 등 다른 앱 구성요소의 라이프사이클을 인식하는 데이터 클래스다. 라이프사이클 인식을 통해 LiveData는 Observer 클래스로 표현되는 관찰자의 활성 상태를 구분하고 업데이트 정보를 알린다. 관찰자가 활성화가 된 상태는 STARTED 또는 RESUMED 상태를 활성 상태로 간주한다. 또한 Activity나 Fragment가 LiveData 객체를 안전하게 관찰할 수 있고, 이들의 수명 주기가 끝나는 즉시 수신 거부되어 쓸데없는 메모리 누수를 걱정하지 않아도 되므로 유용하다. 장점 1. UI와 데이터 상태의 일치 보장 LiveData는 데이터가 변경됨과 동시에 Observer 객체에 통지함. 데이터 변경시 Observer가 대신..