Glide

- apng라는 파일 형식이 있다. PNG 포맷을 기반으로 한 애니메이션 이미지 포맷으로서 GIF와 비슷하지만 더 높은 품질과 투명도를 지원하는 특징이 있다. - 기존에 png, jpg, gif를 활용했었으나 용량 관리 측면에서 apng가 유리하여 새롭게 사용하게 되었다. - APNG 파일은 PNG와 동일한 구조를 가지므로, APNG를 지원하지 않는 프로그램에서도 정적인 PNG 이미지로 보일 수 있음 (하위 호환성) - 그래서 apng가 움직이지 않고 정적인 이미지로 보인다면, 사실 완벽한 렌더링에는 실패했거나 해당 기반 프로그램이 지원하지 않는 것 - 토스와 라인도 apng를 많이 사용하고, 라인에서 안드로이드에서 해당 형식 렌더링을 위한 라이브러리도 구현해 주어서 직접 사용해 봤다. https://g..
- 운영 중인 서비스 로직은 서버로부터 새로운 리소스를 받으면 항상 고정된 경로의 로컬 파일 Storage 경로로 저장을 하고, Glide로 해당 이미지 리소스를 렌더링 하고 있었다. - 그런데 어느날 서버로부터 변경된 리소스를 내려받아도 렌더링 단계에서 해당 리소스가 갱신되지 않는 문제를 발견. - 분명히 로컬 저장 단계까지 변경된 리소스가 저장되는 것까지 확인했으나 원인은 Glide 동작 설정에 있었다. - Glide는 기본적으로 캐싱 기능을 가진다. 디스크 캐시와 메모리 캐시를 활용하여 이미지를 빠르게 로드하고 불필요한 네트워크 요청을 줄이는 기능을 가지고 있다.1. 메모리 캐시 (Memory Cache)이미 로드된 이미지를 RAM에 저장하여 빠르게 다시 불러올 수 있도록 함앱이 종료되거나 메모리가..
- 앱에서 활용하던 GIF 파일들이 많아지면서 용량이 증가하고 관리 비용에도 점점 문제가 생기기 시작했습니다. - 이에 따라 애니메이션 재생에도 뒤처지지 않고, 용량도 더 적은 WebP 파일을 활용하기로 결정했습니다. - Glide를 활용해 렌더링을 진행했는데, 사실 기존 GIF 파일 재생 방법과 큰 차이가 없습니다. 같은 로직으로 두 가지 종류 파일 모두 호환 가능합니다. - WebP가 GIF보다 나은 점들은 아래와 같습니다. - raw 폴더 하위에 webp 파일을 넣고, Uri 경로를 구성해주어야합니다.val resourceUri = Uri.parse("android.resource://${context.packageName}/${R.raw.test}") - 해당 Uri 기반으로 로드해 줍니다. ur..
디바이스 내의 연락처 앱을 사용하다보면, 여러가지 정보들을 포함시킬 수 있는 것을 확인할 수 있습니다. 프로필 사진, 전화번호, 생일, 메모, 연락처 이름 등 다양한 데이터가 존재하는데, 이 중에서 대표적으로 화면에 보여지고 있는 프로필 사진, 생일, 연락처 이름, 연락처 고유 ID 데이터를 우리가 직접 만든 앱으로 가져올 수 있도록 구현해보겠습니다. 먼저 디바이스 연락처 접근 권한을 얻기 위한 permission tag를 AndroidManifest.xml 파일에 추가해줍니다. private fun getContacts() { if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PE..