분류 전체보기 1203

Constraint layout linear layout relative layout 퍼포먼스

Android에 View에 대해서 간단하게 보고 가겠습니다. 결론부터 말하면 퍼포먼스는 Constraint Layout이 좋습니다. 일단 View는 아래와 같은 순서로 그려지는데 1. 측정(Measure) 2. 레이아웃(Layout) 3. 그리기(Draw) 아래 뷰를 기존의 방식대로 배치하면 코드가 어떻게 되는지 보면 아래와 같습니다. 중첩되서 퍼포먼스가 떨어지는 경우가 생길 수 있는데, 이 부분은 castraint layout을 통해서 해결이 가능합니다. 아래와 같이 만들어줄 수 있습니다. - 참조 https://abandonia.tistory.com/1 [번역문] ConstraintLayout의 성능 이점에 대한 이해 * 본 게시물은 구글의 안드로이드 개발자 블로그 게시물을 번역(일부 의역)하여 게재..

Android(Kotlin) 2021.10.15

setvalue postvalue 차이

viewModel에서 livedata를 사용하다 보면, setvalue와 postvalue라는 친구들을 볼 수 있습니다. 이 친구들의 차이가 뭘까 하고 궁금해서 찾아봤는데 setValue() 메인 쓰레드에서 그 값이 즉시 반영됩니다. postValue() setvalue와 다르게 백그라운드에서 동작합니다. 내부적으로 동작하는 코드는 아래와 같습니다. new Handler(Looper.mainLooper()).post(() -> setValue()) setvalue와 다르게 가장 최신의 값이 변경이 되며, 즉시 값이 변경되지 않을 수 있습니다. - 참조 https://leveloper.tistory.com/179 [Android] LiveData setValue() vs postValue() 최근에 프로젝..

Android(Kotlin) 2021.10.08

코루틴과 쓰레드의 차이

코루틴을 사용하다보면, 이 것도 worker 쓰레드에서 동작하는데 그러면 일반적으로 사용하던 쓰레드와 뭐가 다른가? 라고 해서 보면 일반적인 쓰레드에서 작업을 할 때 A,B Task를 동작한다고 생각하면 A Task B Task Thread1 A-> -> -> ->-> Thread2 B-> -> -> ->-> 이렇게 2개의 쓰레드가 돌아갑니다. 코루틴의 경우 Thread1 A B A B A B 이런 식으로 작업 하나하나에 쓰레드 하나를 할당하는 것이 아닌 object를 할당하고, 자유롭게 스위칭하는 형태로 작업을 진행합니다. buildSequence runBlocking launch async 등을 이용해서, 태스크의 수행을 기다리거나, 순차진행하거나 하는 것들을 설정할 수 있습니다. https://ve..

Android(Kotlin) 2021.10.07

Android LruCache kotlin

안드로이드 개발을 하면서 이미지를 가져와봤으면 Glide를 당연히 사용해봤을 겁니다. glide를 사용하면 이미지 캐싱 어쩌고 나와 있는데, 그러면 비트맵 이미지 캐싱은 어떻게 하는가 하는 의문이 들어서 찾아보니 LruCache라는 것이 있네요. 제가 직접 비트맵 이미지 코드를 짜기 귀찮으니 구글에서 찾아봤습니다. 캐싱을 공부하던 도중에, 메모리에 다 올려버려도 될까? 라는 생각이 드는 와중에 코드 중간에 조금 특이한 부분이 cacheSize라고 지정해주는 부분이 있습니다. maxMemory/8 만큼 메모리를 할당한다는 것인데 저렇게 하면 되나? 라는 생각이 들어서 찾아보니 모든 애플리케이션에 적합한 특정 크기나 수식은 없으며 사용량을 분석하여 적합한 해결책을 찾아야 합니다. 캐시가 너무 작으면 아무런 ..

Android(Kotlin) 2021.10.06

Heap Stack

메모리 구조에 대해 간단하게 보겠습니다. 1. 코드 영역(실행할 프로그램의 코드) 2. 전역 변수/정적 변수(데이터 영역) 3. 사용자 동적 할당(힙 영역) 4. 지역변수 매개변수(스택 영역) 코드영역 말 그대로 프로그램 코드가 돌아가는 곳입니다. CPU는 코드 영역에서 명령어를 하나씩 가지고 와서 처리합니다. 데이터 영역 프로그램이 전역(Static) 변수가 저장되는 영역입니다. 힙 영역 프로그래머가 직접 공간을 할당, 해제하는 공간입니다. 힙 메모리는 포인터를 사용하여 힙에 엑세스해야하기 때문에, 읽기와 쓰기가 약간 느립니다. 기본적으로 global scope 입니다. FIFO(First in First out) 방식입니다. 스택 영역 함수의 호출과 관계되는 지역 변수와 매개변수가 저장됩니다. LIF..

기술 2021.09.27

Android thread, Handler, Looper

Android를 개발하다 보면 한번씩은 Thread, Hanlder, Looper를 들어보고 사용해봅니다. 얘네들이 Main Thread말고 별도로 Thread에서 작업한다는 것을 알겠는데 뭐가 다른지 한번 알아보겠습니다. 일단 안드로이드 앱을 실행하면 메인 액티비티를 메모리로 올려 프로세스를 들며 메인 쓰레드(UI Thread)가 생성됩니다. 그러면 메인 쓰레드에서 모든 것을 다 하면 되는데 왜 안할까? 를 생각해보면 긴 시간이 걸리는 작업(네트워크 통신)등을 한다면 애플리케이션 반응성이 낮아지고 ANR 상태가 발생할 수 있습니다. 때문에, Looper와 Handler를 사용합니다. 메인 쓰레드는 내부적으로 Looper를 가지고, 그 안에 Message Queue가 선입선출 형태로 보관됩니다. Loop..

Android(Kotlin) 2021.09.14

Shared Preferences

Shared Preferences란 무엇인지 알아보면, 텍스트 그대로 해석하면 공유된 참조값? 정도로 할 수 있겠네요. 서버에서 받아온 Token이나 로그인 정보같은 것들을 저장해놓고, 필요할 때 꺼내다쓰는 용도 정도로 사용하면 됩니다. 앱 전역에서 사용해줄 것이기 때문에, 싱글톤으로 적용해줍니다. 자, 한번 어떻게 코딩했는지 살펴보면 - 참조 https://leveloper.tistory.com/133 [Android] SharedPreferences 간단하게 사용하기 (Kotlin) 안드로이드 앱을 개발하면서 데이터를 저장하는 방법으로는 여러 가지가 있는데, 오늘은 그중 하나인 SharedPreferences를 사용하는 방법을 알아볼 것이다. SharedPreferences란? SharedPrefer..

Android(Kotlin) 2021.09.10

Android Mockito example

Mockito는 객체를 mocking하는데 사용되는 라이브러리입니다. Android에서 Unit Test를 작성하는데 Mockito를 사용하라고 권장하고 있습니다. Mocking검색을 해보면 조롱한다는 뜻으로 나오는데 객체를 가지고 와서 가지고 논다? 가지고 놀면서 테스트한다? 라는 뜻으로 받아들이면 될 것 같습니다. 여기에서 잠시 jUnit과 mockito의 차이를 보고 가면 아래와 같고 예제를 한번 보면, 아래와 같이 파일 구조를 만들어 놨습니다. 간단하게 SharedPreference를 저장하는 예제이고 코드는 아래와 같습니다. build.gradle코드 코틀린 코드 테스트 코드 - 참조 https://developer.android.com/training/testing/unit-testing/lo..

Android(Kotlin) 2021.09.10