Android

Android/Development Tips

Bitmap, contentUri 를 Retrofit RequestBody 에 담을 때 Tips

보통 Retrofit 를 통해 RequestBody 를 만들어 서버로 보낼 때, Bitmap -> file 저장 -> file 을 RequestBody 로 변경하여 서버로 보내는 예제들이 간혹 보입니다. contentUri 도 마찬가지로 file 로 저장하고 RequestBody 로 변경하여 서버로 보내곤합니다. 그리고 코드도 올바르게 동작합니다. 하지만 해당 과정에는 파일로 저장할 필요가 없는 케이스도 있습니다. 해당 케이스의 경우 아마 위의 방식을 사용하면 이후에 파일을 삭제하는 로직 혹은 버전이 올라가면 해당 파일을 포함한 폴더를 비워주는 작업들이 필요하게 됩니다. 이런 경우 불필요한 파일 IO 작업을 생략할 수 있는 방법들이 있습니다. 1. Bitmap 의 경우 class BitmapRequest..

Android/Development Tips

Hilt 수박 겉핥기

www.youtube.com/watch?v=gkUCs6YWzEY 앞으로 Hilt 를 사용할 것 같은 느낌이 강하게 들어, 드로이드 나이츠 2020 옥수환님이 발표하신 영상 보면서 정리해봤습니다 Dependency Injection(의존성 주입) 이란 ? - 생성자 또는 메세드 등을 통해 외부로부터 생성된 객체를 전달받는 행위 의존성 주입의 특징? - 클래시간 결합도를 느슨하게 만든다 - 인터페이스 기반으로 설계되며, 코드를 유연하게 변경 가능하도록 한다 - Stub 또는 Mock 객체를 사용하여 단위 테스트를 하기가 더욱 쉬워진다 간단한 예제코드 // 의존성 주입이 없는 코드 class MemoRepository { private val db = SQLiteDatabase() fun load(id: St..

Android/번역

코루틴을 뷰에 적용하기

해당 글은 아래 글의 번역본으로 오역이 있을 수 있다는 점 미리 공유드립니다. medium.com/androiddevelopers/suspending-over-views-19de9ebd7020 Suspending over Views How coroutines can make UI programming easier medium.com 코틀린의 코루틴은 비동기적인 문제들을 마치 동기적으로 처리할수 있도록 도와줍니다. 해당 방식으로 사용되는 것은 매우 좋습니다. 그러나 코루틴을 사용하는 대부분은 동시성의 작업들 혹은 I/O 작업에만 집중하여 처리되는 것 처럼 보입니다. 코루틴은 여러 스레드(멀티 스레드)를 오가며 문제를 해결할 수 있도록 모델링 되어 있습니다. 그러나 하나의 스레드에서도 비동기 문제를 해결할 ..

Android/번역

코루틴 플로우(Flow) 읽어보기

해당 글은 아래 글의 번역본 입니다. 오역이 있을 수 있으니, 코멘트 남겨주시면 감사합니다. kotlinlang.org/docs/flow.html#sequences Asynchronous Flow - Help | Kotlin kotlinlang.org Flows ? 순차적으로 값을 배출해서, 정상적으로 완료하거나 에러를 던지는 비동기 데이터 스트림 입니다. 일시중단할 수 있는 함수는(Suspending function) 비동기적으로 하나의 값을 반환합니다. 하지만 비동기적으로 계산되어진 값을 여러개를 어떻게 반환해야할까? 이때 Flow 를 사용해아합니다. 여러값 표현하기 - List 다양한 값들은 코틀린의 Collections 을 사용하여 표현될 수 있습니다. 예를 들어 우리는 3개의 숫자를 반환하는 리..

Android/번역

코틀린으로 알아보는 SOLID 원칙

해당글은 blog.berkberber.com/solid-principles-in-kotlin-4f37e9b62dde SOLID Principles in Kotlin In object-oriented computer programming, SOLID is design principles intended to make software more understandable, flexible and… blog.berkberber.com 의 번역본 입니다. (글쓴이가 화웨이에 다니고 있어서 그런지 화웨이 예제가 상당히 많네요) SOLID ? 객체 지향 프로그래밍에서 SOLID 원칙은 좀더 "이해가능한", "유연한", "유지보수 가능한" 소프트웨어를 만들기 위해 의도 되어진 디자인 원칙이다. SOLID 원칙은 기능 ..

Android/Today I Learned

테스트 케이스로 작성해보는 RxJava 함수

이제는 코루틴으로 인해, 사용빈도가 적어지는 자주 사용했던 Rx 함수들을 정리하는 시간을 가지려고합니다. 그리고 안녕... 제대로 동작하는 것을 확인하기 위해, 테스크 케이스로 작성하고 딱 20개만 해보려고합니다. 먼저 전체 코드를 링크 걸어두겠습니다 Single, Completable, Observable, Flowable, Maybe 의 목적과 특성은 이미 알고 있을 것이라고 가정하고, 위의 자료형과 상관없이 생각나는 함수 위주로 작성해보겠습니다. 1. Just 함수 /** * Single.just, SingleJust : Single 로 Wrapping 된 아이템을 한번 방출한다. * 특정 아이템을 Single 타입으로 변경하여 체이닝을 이어갈 때 사용하면 유용하겠다. * ex) flatMap 으로..

Android/Development Tips

DialogFragment 를 상속하는 다이얼로그에서 dismiss 할 때 Tips

// dialog 를 프로퍼티(멤버변수)로 선언했다고 가정 dialog?.dismiss() dialog = Dialog() dialog?.show(xxxFragmentManager, dialogTag) 위와 같은 코드가 있다. 대략적인 의미를 보면 1. dialog null 이 아니라면 dismiss 시키고 2. dialog 를 초기화 하고 3. 마지막으로 다이얼로그를 보여준다. 잘 작성한 코드로 다이얼로그가 중복으로 뜨는일은 없을 것 같이 느껴진다. 하지만 Configuration change(퍼미션 변경, 화면 변경, 언어 변경 등), OOM 가 일어나면 문제가 생기게 된다. 보통 안드로이드 이론 공부하면, Configuration change 가 일어나면 액티비티가 다시 시작되는 것을 우리는 알고 ..

Android/Development Tips

java.lang.IllegalStateException: Software rendering doesn't support hardware bitmaps 에러 수정하기

Context 와 Uri 를 사용하여, Bitmap 을 가져오는 함수가 deprecated 되어 Replacement 함수로 변경하고 나서 QA 중 에러가 발생했다. 아래와 같이 레거시 방법들을 사용하고 있었고 // (deprecated) BitmapDrawable(context.resources).bitmap // (deprecated) BitmapDrawable( context.resources, MediaStore.Images.Media.getBitmap(context.contentResolver, this) ).bitmap 사용했던 문제의 코드 ImageDecoder.decodeBitmap(ImageDecoder.createSource(context.contentResolver, this)) 에서..

Android/Development Tips

다양한 뷰타입을 가지는 Recyclerview 만들기

오랜만에 안드로이드 글을 작성하는 것 같습니다. 적당한 퍼포먼스를 가지는 리싸이클러뷰를 만들어 볼 예정입니다. 완성된 소스코드는 맨 아래 링크에 있습니다. 이번 포스팅은 Architecture 등은 제외하고, Recyclerview 구현에만 관심이 있습니다. 4개의 뷰타입을 가지는 리싸이클러뷰 디펜던시는 프로젝트 생성시 추가되어 있는 라이브러리 + Third party (Glide, Recyclerview) 입니다 네트워크에서 가져온다면 (Gson 등이 필요합니다) 먼저 보여줄 Data class 를 명세해줍니다. @Parcelize 어노테이션을 이용하여, 다른 Activity, Fragment 에 아이템을 전달할 일이 있을 때, 쉽게 처리할 수 있도록 추가하였습니다. @Parcelize data cla..

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