Android

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/Today I Learned

findViewTreeLifecycleOwner == null 인 경우?

이따금식 LifecycleOnwer 를 사용하기 위해, View 의 확장함수인 findViewTreeLifecycleOwner 를 사용하는 경우가 있습니다. 간혹 아무 생각 없이 사용하다보면 findViewTreeLifecycleOwner 가 null 을 반환하는 경우가 있습니다. RecyclerView 에서 사용하는 케이스는 https://pluu.github.io/blog/android/2021/09/20/lifecycleowner/ 에서 잘 설명하고 있어서 해당 글을 참고 해도 좋을 것 같습니다. RecyclerView 에서는 doOnAttach 함수를 사용하여, Lifecycle 을 얻어올 수 있지만, doOnAttach 로 해결되지 않는 케이스들도 존재 합니다. 먼저 ViewTreeLifecyc..

Android/Today I Learned

네트워크 요청 실패했는데, RunCatching onSuccess 가 호출?

TL;DR "네트워크 응답을 Result 와 같은 클래스로 래핑하면 실수할 확률이 높습니다." 상태 코드가 필요하면 awaitResponse 를 이용하고 아니라면 await 를 사용 합시다 해당 게시물은 실무에 도움이 되는 지식은 없고, 단순히 호기심으로 진행되었습니다. 회사에서 레거시 코드를 건드리는 중에, 신기한 일을 경험하였습니다. runCatching { apiCall.await() } .onSuccess { // ... } .onFailure { // ... } 와 같은 코드에서 네트워크 요청이 실패하여 400 이상 상태 코드들이 내려오는데 모두 onSuccess 를 타고 있었습니다. 문제가 있던 apiCall.await() 의 자료형은 아래와 같았습니다. apiCall 이 RxJava Sing..

Android/Today I Learned

주관적인 Compose 사용 후기

히스토리를 찾아보니, Compose 를 현업에 처음 사용한 것이 작년 11월이네요. 주기적으로 밀도 있게 쓰지는 않았지만, 시간 될 때마다 조금식 기여하여 회사 프로젝트에 20 개 넘는 화면을 Compose 로 구성하였고, QDSC(Qanda-design-system-compose) Sample App 을 만들기도 하였습니다. QDSC 는 아직 완성 단계는 아니지만, 거의 마무리 단계인듯 보이네요. 앞으로 적을 글은 매우 주관적인 내용들을 담고 있습니다. 장점1 주관적으로 생각하는 Compose 의 가장 큰 장점을 하나만 선택하자면 "직관적" 이라고 말할 수 있을 것 같습니다. 선언형이기 때문에 컴포넌트(Box, Column, Row, Chip, Lazy* ...) 의 특성을 이해 한 뒤에 이를 나열하기..

Android/Today I Learned

서버 디펜던시 없이 네트워크 작업 캐시 구현하기(feat.OkHttp)

해당 글은 주관적인 의견이 많이 들어가고, 잘못된 내용이 있을 수도 있습니다 :) 코드는 아래 링크로 첨부해두겠습니다 이번 주제는 서버에서 etag, last-modified 등의 캐시 처리를 지원해주지 않을 때, 안드로이드에서 간단히 처리할 수 있는 방법에 대해 알아보려고 합니다. *서버에서 캐시 처리를 위한 정보(Cache-Control) 를 잘 내려준다면, OkHttp 를 이용하여 CacheDirectory 만 생성해주면 알아서 처리해주기 때문에 해당 포스트를 읽지 않아도 됩니다. 먼저 안드로이드에서 캐시하면 가장 바로 떠오르는 것중 하나가 Room, sqlite, realm 과 같은 로컬 데이터 베이스를 사용하는 것 입니다. 해당 방식의 처리도 좋지만, Table 과 Entity 를 정의해야 한다..

Android/Interview Question

Blocking, NonBlocking, Sync, Async 이해하기 좋은 아티클

https://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/#about Blocking-NonBlocking-Synchronous-Asynchronous 꽤 자주 접하는 용어다. 특히나 요즘들어 더 자주 접하게 되는데, 얼추 알고는 있고 알고 있는게 틀린 것도 아니지만, 막상 명확하게 구분해서 설명하라면 또 만만치가 않은.. 그래서 찾아보면 homoefficio.github.io 본문의 정리를 인용하면, Blocking/NonBlocking은 호출되는 함수가 바로 리턴하느냐 마느냐가 관심사 바로 리턴하지 않으면 Blocking 바로 리턴하면 NonBlocking Synchronous/Asynchronous는 ..

Android/Today I Learned

Material library 1.5.0 로 올리니 크래시가?!

해당 글에서는 AOSP 코드와 Material 코드를 보며 어떤식으로 에러를 수정하였는지 전달하고, 혹시나 AOSP 코드 등을 확인해야한다면 어떤식으로 접근할지 도움을 드리기 위해 작성하는 글입니다. 배포를 하기 위해 새로 개발된 Feature 들을 머지하고 QA 를 하던 도중 아래와 같은 에러가 발생하였습니다. MaterialCardView 에서 발생하고 있었고, 특징으로는 Android 9 이하의 버전들에서 발생하고 있었습니다. 먼저 사용하는 쪽의 코드를 간략하게 확인하였습니다. (checked 에 들어가는 값은 viewModel 을 통해 넣어주고 있고 회사 코드가 드러날 수 있어 제거하였습니다) 이전에 문제 없이 잘 동작했기 때문에 한눈에 어떤 것이 문제 인지 알수가 없었습니다. 또한 코드가 변경된..

Android/Today I Learned

Compose 버튼 사이즈 관련 Tips

Button(IconButton, RadioButton, Switch....) 대부분의 Component 에서 minimumTouchTargetSize() 함수가 내부에서 처리되는 것을 볼 수 있습니다. 잠시 함수를 보면, 48 dp 보다 작은 경우 Component 자체에 Padding 이 들어가게 됩니다(ContentPadding 을 0 으로 줘도 Component 밖으로 Padding 이 생깁니다). 따라서 48 보다 더 작은 값을 넣고 싶은 경우, 내부에 코드들을 모두 복사해서 minimumTouchTargetSize 함수를 제거해줘야 합니다. 혹은 아래와 같이 minimumTouchTargetEnforcement 를 false 로 변경하여 처리할 수도 있습니다. CompositionLocalPr..

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

Nanamare
'Android' 카테고리의 글 목록 (3 Page)