Android/Development Tips

Android/Development Tips

Domain 모듈에서 Paging, Room(RemoteMediator) 라이브러리 의존성 해결하기

오늘 이야기 하는 Tips 은 거의 활용되기 뻘팁이 될 확률이 높고, 그냥 "이렇게도 가능하다" 정도로만 이해해주시면 감사합니다. 해당 프로젝트 주소는 하단에 적어두었습니다. 일반적으로 Domain 은 Pure Java/Kotlin 으로 하는 경우가 많습니다. 따라서 Paging3 를 사용하다보면 도메인에 PagingSource, PagingData 등의 자료구조를 활용하지 못하기 때문에 고민에 빠지게 됩니다. 거의 대부분 아티클을 보면 // alternatively - without Android dependencies for tests implementation "androidx.paging:paging-common:$paging_version" 를 추가해서 사용해라 라는 이야기가 많습니다. 하지만 ..

Android/Development Tips

2.4.1 이상 버전에서 Navigation Component 사용할 때 주의점

관련 문구 https://medium.com/androiddevelopers/navigation-multiple-back-stacks-6c67ba41952f Navigation: Multiple back stacks Welcome to another article in the second MAD Skills series on Navigation! In this article we’ll take a look at a highly requested feature… medium.com 관련 레포지토리 (NavigationAdvancedSample) https://github.com/android/architecture-components-samples/tree/master/NavigationAdvancedSa..

Android/Development Tips

DataStore Protocol Buffer 사용시 Tips

회사에서 필요해서 사용한 후기를 간단하게 적어둡니다. 불편했던 점 1. 사용시에 .proto 파일이 변경되면 빌드가 필요했습니다. 2. Map 같은 구조가 아니기 때문에 여러개 필요하다면, DataStore 객체를 만들어 낼 때, FileName 을 변경하여 처리했습니다.(물론 같은 이름으로 동시에 열수 없도록 처리되어 있습니다) 장점 1. 사용하기가 편합니다. 2. 빌드 이후 Generate 되는 코드를 보며 코드를 작성하면 되서 큰 어려움이 없었습니다. 아래와 같은 데이터 형식을 저장한다고 하면 val foodStores = listOf(FoodStore(....), FoodStore(....), FoodStore(....) ....) data class FoodStore( val name: Stri..

Android/Development Tips

알고 계시나요 Fragment 가 복원되는 시점?

A Activity 에 B Fragment 가 있는 상황에서 A Activity 의 복원이 일어나면, A Activity 의 onCreate 보다 B Fragment 의 onViewCreated 가 먼저 호출됩니다. (정확하게는 A Activity super.onCreate 호출 -> B Fragment 의 onViewCreated 호출 -> A Activity onCreate 호출로 진행됩니다) 따라서 A Activity onCreate 에서 어떤 값을 초기화해주고, B 의 onViewCreated 에서 무언가에 접근하는 코드가 있다면 크래시가 발생하게 됩니다. 복원이 아닌 일반적인 경우는 A activity onCreate 이후 B Fragment onViewCreated 가 호출됩니다. 문제가 생겼..

Android/Development Tips

BroadcastReceiver 사용할 때 유의점

BroadcastReceiver 를 상속 받아 사용할 때, 마치 싱글턴으로 관리 될 것 처럼 생겼지만, hashCode 찍어보면 매번 생성되는 것을 알 수 있다. 따라서 AppWidgetProvider 를 상속 받아 사용할 때 멤버 변수에 값을 저장하고 사용하는 방식등은 초기화 되기 때문에 조심해야한다. 위젯 좋은 예제

Android/Development Tips

Coil 썸네일 구현하기

Coil 은 썸네일 기능을 따로 제공하지 않고 있습니다. 이때 사용해 볼 수 있는 확장 함수 입니다. fun ImageView.loadOriginalImage(originUrl: String, thumbnailUrl: String) { CoroutineScope(Dispatchers.Main.immediate).launch { val thumbnail = async(Dispatchers.IO) { val request = ImageRequest.Builder(context) .data(thumbnailUrl) .build() Coil.execute(request).drawable } val original = async(Dispatchers.IO) { val request = ImageRequest.Bu..

Android/Development Tips

안드로이드 하드웨어 비트맵

이전 글 : https://nanamare.tistory.com/170 와 관련이 있습니다. 몇일 전 아래와 같은 에러를 다시 만났습니다. Software rendering doesn't support hardware bitmaps 해당 이슈는 아래와 같은 코드에서 발생했습니다. canvas.drawBitmap(bitmap, width, height, paint); 결론적으로 "위 코드의 bitmap 이 하드웨어 비트맵이기 때문에, CPU 에 정보가 있지 않아 그려낼 수 없다." 가 원인이였는데, 이전글에서 bitmap 을 가져올 때, ALLOCATOR_SOFTWARE 옵션을 주기 때문에 아마 다른 원인이 있을 것이라고 생각하고 코드를 확인해봤습니다. uri 에서 bitmap 을 변환 시키는 것이 아닌 ..

Android/Development Tips

ViewModel 에서 Fragment, Activity 로 콜백을 조심하자

ViewModel 의 라이프 사이클은 Activity 나 Fragment 보다 길기 때문에 ViewModel 에서 Fragment, Activity 에 콜백 받는 것은 실수를 유발합니다 (ViewModel 에서든) 라이브데이터나 플로우를 사용하여 관찰(observe) 혹은 수집(collect) 하는 것이 좋습니다. // Activity or Fragment.kt viewModel.loadItemList() { list -> // Activity 가 Destroy 상태거나 Fragment 인 경우 not Attached 일 수 있음 // 또한 isDestroyed 혹은 isAdd 와 같은 상태를 확인하는 처리가 필요하게 됩니다 adapter.submitData(list) }

Android/Development Tips

Google login errorCode 12500 인 경우

먼저 1. Firebase console -> 설정 -> 내프로젝트 항목에서 지원 이메일이 제대로 등록되어있는지 체크하기 2. Firebase console -> 설정 -> 내 앱 항목에서 SHA-1 타입의 인증서가 잘 추가가 되어있는지 체크하기 3. Debug 앱 등이 있어도 BuildType 에 맞게 들어있다면 google-services.json 에 모두 담겨 오기 때문에 크게 문제 없습니다. 4. 이모든게 모두 잘 되어 있다면 Google 사용자 인증 정보에 들어가서 OAuth 2.0 클라이언트에 해당 앱의 패키지 혹은 디버그 버전 패키지가 잘 추가되어 있는지 확인 하기 저는 4번 케이스로 보통은 google 에서 자동으로 추가시켜주는데(키에 was created auto by google 식으로..

Nanamare
'Android/Development Tips' 카테고리의 글 목록 (2 Page)