본문 바로가기

IT/Android9

Image Load Library (Glide vs Picasso vs Fresco) feat. Image Caching 안드로이드에서 유명한 이미지 로드 라이브러리들은 대표적으로 Google의 Glide, Square의 Picasso, Facebook의 Fresco가 있다. 일단 이 이미지 로드 라이브러리를 비교해보기에 앞서, 안드로이드의 이미지 캐싱에 대해 알아보자! 이미지 캐싱은 왜 필요한가? 특정 URL 이미지를 매번 로드하는 것은 비효율적인 일이기 때문이다. 한번 로드된 이미지를 캐싱하여 사용하게 되면 '이미지 트래픽에 대한 비용 절감'과 'UX적인 속도 향상'이 일어나게 된다. Glide Google 라이브러리. 장점 : 속도가 빠르다. 사용법이 간편하다. 캐시를 위해 적은 양의 메모리를 사용한다. gif, 애니메이션 default처리 등 다양한 부가 기능이 필요할 때 사용한다. 안드로이드 공식에서 추천하는 라이.. 2021. 11. 3.
navigateUp(), popBackStack() 차이 navigateUp()과 popBackStack()은 무슨 차이가 있을까? 먼저 둘의 차이를 알아보기 이전에 Navigation에 대해 간단히 살펴보자. Navigation이란? 네비게이션은 사용자가 앱 내의 여러 콘텐츠를 탐색하고, 다시 나올 수 있도록 하는 상호 작용을 의미한다. Navigation refers to the interactions that allow users to navigate across, into, and back out from the different pieces of content within your app. 간단히 말해 Acitivty-Fragment 간의 Transcation을 쉽게 구현하기 위한 Jetpack의 Component이다. 또한 네비게이션은 아래와 같은 .. 2021. 4. 18.
AppbarLayout, CoordinatorLayout, Behavior CoordinatorLayout 내부의 Scroll Restore (스크롤 위치 복원) 방법 xml 상의 id를 지정해주면 된다. → 스택오버플로우에 의하면 id를 지정해두면 saveState 할 때에 id로 저장하기 때문에 스크롤이 저장된다고 한다. → CoordinatorLayout id 지정하고, 스크롤 behavior 지정된 쪽에서도 id 지정해주어야 스크롤이 저장된다고 한다. https://stackoverflow.com/questions/29208086/save-the-position-of-scrollview-when-the-orientation-changes/39898595#39898595 2021. 4. 7.
Fragment에서 Back키 처리 방식 private val callback = object : OnBackPressedCallback(true // default to enabled) { override fun handleOnBackPressed() { // Do Something } requireActivity().getOnBackPressedDispatcher().addCallback( this, // LifecycleOwner callback ) } activity.onBackPressed()를 쓰지 않고 Fragment에서 자체적으로 처리하는 이유는 무엇일까? Activity에서 특정 Fragment만 지정하여 Back 키에 관한 로직을 정의하게 될 경우 의존이 생기는 것을 방지할 수 있다. onBackPressed를 전달 받기 위해.. 2021. 4. 4.
21.04.03 코틀린 인 액션 읽으면서 궁금한 점 + 기억할 점 메모. 코틀린은 자바6과 완전히 호환된다. - 자바6,,? 자바 세대 별 차이는 람다식이 8에서부터 도입되었다는 것밖에 모르는데 왜 자바6일까..? 자바 @Nullable 어노테이션이랑 코틀린 ? 차이 - (동일한가..?) 자바에선 Nullable 어노테이션이 어케 생겨먹었는지 대부분 코틀린 표준 라이브러리 함수는 람다 함수를 인라이닝한다. - inline 내에 넣어서 순차적으로 적힌 코드랑 동일하게 실행된다는건가? GC... JVM.... 까지....언제 공부하냐 코틀린-자바 변환기 - 이거 사용해보면 완벽하게 동작하진 않던데, 왜인지? 뭔가 당연히.. 어떤건 불일치해서인건 아는데 대표적인 이유가 궁금합니다... 함수를 최상위 수준에 정의할 수 있다. .. 2021. 4. 3.
람다와 익명클래스 괴담 "람다 함수로 작성한 코드는 로그 출력이 되는데, 익명 클래스로 작성한 코드는 로그 출력이 안 되는데 이유가 뭐지..!" 엥, 그거 그냥 익명 클래스로 코드 작성을 잘못한 거 아니야? "아냐, 둘다 토스트 띄우는 건 성공했단 말이야." 로그 레벨이 다르게 되어있는 거 아니야? "그랬으면 람다에서도 출력이 안 되지 않나..?" 그랬다. 때는 3일 전. 전 회사에 같이다녔던 오빠가 대뜸 카톡으로 람다와 익명클래스 괴담에 대해 물어보았다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 회사에서 야근?을 빙자한 저녁 먹고 퇴근 하던 도중에 이 질문에 묘하게 꽂혀서 "anonymous class java listener log not working" 같은 검색어를 쳐가며 스택오버플로우를 .. 2021. 3. 14.
Serializable vs Parcelable Serializable은 코드 작성이 편하다. 대신에 Parcelable보다 속도가 느리다. Serializable은 null에 엄격하다. 2021. 2. 19.
Epoxy 사용법 정리 에어비앤비 라이브러리 Epoxy requestModelBuild() = notifyDataSetChanged() 와 동일하다. buildModels()의 함수를 재 실행한다. buildModels에는 ItemHolder나 Item(model)을 구현하여서 넣을 수 있다. 케이스에 따라 addIf를 추가하여 특정 Boolean일 때만 해당 모델이 빌드되도록 만들 수도 있다. 이 기능을 이용하여 로딩중일 때나, 오류가 났을 때 보여질 모델을 따로 추가할 수 있다. // build.gradle implementation "com.airbnb.android:epoxy:4.2.0" implementation 'com.airbnb.android:epoxy-paging:4.1.0' // Add the annotati.. 2021. 1. 1.
[Android Studio] OpenCV 적용 OpenCV Github Releases OpenCV Sorceforge 두 링크 중 아무 곳에서나 필요한 버전의 파일(opencv-x.x.x-android-sdk.zip)을 다운로드 OpenCV-android-sdk\sdk\native의 libs 파일을 프로젝트 내의 app\src\main로 복사한다. 붙여넣은 libs 폴더의 이름을 jniLibs로 변경한다. 이후 잠시 error: package android.hardware.camera2 does not exist에러 발생하였으나 해당 방법으로 해결. Ref. https://blog.qwaz.io/dev-diary/android-studio-2-2에서-opencv-3-1-세팅하기 https://emptybox031.tistory.com/entry/안.. 2019. 10. 16.