본문 바로가기

안드로이드 코딩일지4

[Android] WorkManager 'Could not instantiate Worker' 해결법 Android JetPack Component 에 'WorkManager' 라는 친구가 있다. 초기 안드로이드는 백그라운드 실행 정책이 느슨했기 때문에 여러 앱이 각자 백그라운드 태스크를 수행하면서 스마트폰의 자원을 엄청 소비하며 최악의 상황에 다다르기도 했다. 그래서 버전이 올라가면 올라갈 수록 앱의 백그라운드 실행 정책이 까다로워지게 되었다. 하지만 엄격해진 백그라운드 정책에도, 몇 가지 제약 조건에 부합하고 사용자의 기기 상태를 존중한다면 (잠자기 모드에 있는 스마트폰을 깨우지 않는 등) 손쉽게 백그라운드 태스크를 등록할 수 있게끔 도와주는 녀석이 바로 'WorkManager' 다. 2018년 구글 I/O 에서 처음 공개되었다. WorkManager 를 활용하여 특정 태스크 (백그라운드에서 실행될 .. 2021. 2. 24.
[Android] 안드로이드 10 이상 기기에서 클립보드 액세스가 안될 때 앱을 개발하다보면 사용자의 클립보드 데이터를 활용하는 기능이 있다. 대표적으로 카카오뱅크, 토스와 같은 뱅킹 앱의 '복사한 계좌로 이체하기' 기능이 있다. 앱을 진입할 때마다 클립보드에 있는 데이터를 액세스하여 만약 계좌 번호 정보가 담겨있다면 해당 계좌로 빠른 송금을 할 수 있도록 토스트 메세지를 띄워주는 기능이다. 사용자 경험 상 엄청난 편리함을 제공하는 기능이다. 이런 기능이 구현될 수 있었던 것은 Android, iOS 가 클립보드 접근 프레임워크를 제공해주기 때문이었다. 그런데 필자는 개발중인 앱에 이 클립보드 프레임워크를 기반으로, 클립보드 데이터를 액세스하고 검사하여 사용상 편리를 제공하는 기능을 구현하던 중 이상한 점을 발견했다. 당연하게도 Android 공식 문서에서 클립보드 프레임워크 .. 2021. 2. 20.
[Android] Koin 을 통한 ViewModel Injection 먹통 오류 해결 방법 Koin 라이브러리를 활용하여 프로젝트에 DI 를 진행하면 코드의 재 사용성이 높아지고, 분명 유지보수에 용이해진다. Koin 이 제공하는 다양한 기능들 중 강력한 기능이 하나 있는데, 바로 ViewModelProvider 없이 ViewModel 인스턴스를 생성하여 사용할 수 있는 기능이다. 또한 Fragment 에서 Activity 의 ViewModel 을 재사용할 수 있도록 도와주기도 한다. KoinModules 에 ViewModel 을 추가해주고, startKoin 의 Modules 목록에 이를 추가하기만 하면 된다. 하지만 필자는 어느날 앱을 개발하던 중 Koin 을 활용하여 ViewModel 인스턴스를 생성하려고 했으나 Koin 에서 제공하는, ViewModel 주입을 위한 'by viewMod.. 2021. 1. 27.
[Android] RecyclerView 의 순서가 재구성될 때 ImageView 가 사라지는 이유는? 필자는 아이템의 View 에 ImageView 가 포함된 RecyclerView 를 만들고, (이 때 Item 객체에 Image 가 포함되어 있지 않으면, View.GONE 을 통해 ImageView 를 숨기는 기능을 구현했다.) 사용자가 선택한 정렬 필터 등에 의해 RecyclerView 의 Item 순서가 재구성 되는 기능을 구현했을 때 원래 ImageView 에 이미지가 있던 Item 의 ImageView 가 사라지는 오류를 겪었다. 문제의 코드는 아래와 같다. 처음에 대체 이 코드가 뭐가 문제인지 몰라서 RecyclerView 를 탓하곤 했다. 정말 평범한 코드다. 이미지가 없는 이미지면 View.GONE 을 통해 ImageView 를 사라지게 하고, 만약 이미지가 있다면 해당 아이템의 Image.. 2021. 1. 20.