본문 바로가기

안드로이드

아키텍처 관점에서 LiveData에 대해서. (StateFlow) LiveData란? 💡 LiveData란 데이터를 관찰할 수 있는 data holder class 입니다. LifeCycle에 결합되며, 결합된 컴포넌트의 생명주기 상태가 active(STARTED, RESUME)활성화 상태일 때만 data에 대한 update를 제공 Observer 객체와 함께 사용한다. LiveData는 변화를 옵저버에게 알려주고 Observer의 onChanged() 메소드를 실행한다. LiveData 특징 UI가 데이터 상태와 일치하는 것을 보장합니다. LiveData는 Observer 패턴을 따릅니다. LiveData는 생명주기에 변경이 일어날 때마다 Observer 객체에 알려줍니다. 그리고 이 Observer 객체를 사용하면 데이터의 변화가 일어나는 곳마다 일일이 UI를 변경.. 더보기
About Graphic API in android.graphics (커스텀뷰란?) Canvas, Bitmap, Paint Bitmap 이미지를 표현하기 위해서 사용되는 녀석 안드로이드 기본 디코더에서 지원하는 이미지 포맷 : BMP, GIF, JPG, PNG, WebP, HEIF - 물론 버전별로 조금씩 상이하긴 하다. bitmap은 OS에서 제대로 관리를 해주지 않기 때문에 메모리 누수가 나지 않기 위해서는 별도의 관리를 해주어야 한다. 안드로이드 3.0이하에서는 Native Heap 영역에 메모리가 할당 → GC 대상이 아님 안드로이드 3.0 이상 Dalvik VM heap에 할당 → GC 대상 따라서 할당 해제를 해주는 것도 좋다고 한다. BitmapFactory에서 decodeXXX의 함수들로 bitmap으로 변환해준다. 💡 따라서 bitmap은 자료구조라고 생각하면 되고, 그것을 만들어주고 관리해주는 것이 Bitm.. 더보기
RecyclerView 이론 Recycler View란? Recycler 재활용이 되는 ViewGroup이라고 생각하면 된다. 그림으로 보면 일반 리스트뷰와 크게 차이를 느낄 것이다. 결론적으로 말하자면 기존 ListView보다 훨씬 더 효율을 지닌 리스트뷰가 탄생했다고 생각하면 된다. 일반 리스트뷰 어댑터에 데이터를 담아놓는다면 리스트뷰는 한 방에 렌더링을 하면서 리소스를 많이 잡아먹게 된다. 만일 그게 1000000000개의 리스트가 필요하다면 어떻게 될까? 바로 터져버릴 것이다.(그전에 그냥 종료될 것이다) 리사이클러뷰는 다르게 생성할 준비는 마친채로 데이터만 바인딩 되길 기다리는 여분의 리스트를 위 아래에 미리 띄운다고 생각하면 된다. 뭐가 재활용인가? 위 아래로 여분의 리스트가 2개씩 있다고 친다면 스크롤을 확 올려 버렸을.. 더보기
Android UI이론 안드로이드 앱을 처음 실행했을 때 보는 화면을 View라고 한다. 사용자는 View라는 컴포넌트를 통해서 앱과 상호작용을 한다. 우리는 이것을 User Interface라고 한다. User Interface는 View, Viewgroup의 결합으로 만들어지며 View에 대해서 상호작용을 합니다. 이러한 View도 생명주기가 있다 Constructors는 컴포넌트를 생성할 때 해당 클래스로 따라가보면 Contructors들이 선언되어 있는 것을 볼 수 있다. 화면에 나타나는 데에는 3가지로 분류된다. 1. measure 2. layout 3. draw 화면이 그려지는 순서를 말로 간단하게 요약하자면 다음과 같다. 먼저 View가 그려질 때 measure() 함수에서 View의 크기를 결정하기 위해 호출된다.. 더보기
안드로이드 Intent의 모든것 Intent 이론 https://www.truiton.com/2013/04/android-sendorderedbroadcast-example-with-priority/ 인텐트란? 안드로이드의 애플리케이션 구성은 4대 컴포넌트로 이루어져 잇다. 액티비티(Activity) 서비스(Service) 브로드캐스트 리시버(Broadcast Receiver) 컨텐트 프로바이더(Content Provider) 💡 위에 해당하는 컴포넌트들과의 통신자의 역할을 가지고 있다고 생각하면 될 것 같다. 통신 방법으로는 2가지가 있다. 암시적 명시적 인텐트이다. 암시적, 명시적 인텐트란 무엇일까? 인텐트의 종류new 💡 간단하게 말했을 때 암시적 : 의도가 불명확하다. 해당 액션에 대해서 정확히 실행할 액티비티에 대한 보장이 없.. 더보기
Broad Cast 이론 ( Android 공식문서 ) BroadCast Overview Publisher - Subscribe Pattern과 유사함. 💡 Pub가 이벤트를 생성할 때마다 굳이 알려주진 않는다. 하나의 중간 수신자가 알려준다. 💡 Pub가 기기, Sub가 앱이라고 할 수 있을듯하다. 💡 해당 패턴에 대해서 어떤 구조인지만 봐도 브로드캐스트 리시버가 어떤 역할을 해주는지 알 수 있다. BroadCast Receiver란? Android 시스템에서 관심 있는 이벤트가 발생할 때 브로드캐스트를 전송할 수 있다. 이를 감지하고 그 리시버가 있는 앱으로 전달해주는 역할을 한다. 기기와 앱에 대한 메세징 시스템이라고 생각하면 될 것 같다. 💡 백그라운드에서 많이 돌려버리면 메모리 초과가 생기고 배터리가 많이 닳게 된다. 특히 암시적 브로드 캐스트는 수.. 더보기
FileProvider 예제 [카메라로 찍은 사진 가져오기] 💡 PhotoActivity.kt, activity_photo.xml, file_paths.xml, Manifest.xml 사진찍고 사진을 저장 → 이미지뷰에 띄우기(Bitmap) 예제를 해보겠습니다. Manifest에 내 사진을 접근해줄 Provider추가. application 내부 //접근할 위치? 라고 생각하면 될듯하다. android.support.v4.content.FileProvider에서 불러오면 안된다. 2020. 5월에 라이브러리 관리 중단 getBitmap()함수는 API29에서 더이상 지원하지 않는다. 버전별로 분기를 나누면 될듯하다. file_paths.xml activity_photo.xml PhotoActivity.kt onCreate 권한요청 if (Build.VERSION... 더보기
Activitiy란? 4대 컴포넌트 중 하나에 대해서 Activity란? 사용자 관점에서는 보이는 화면 개발하는 관점에서는 .kt + .xml 파일의합물론 객체 지향이랑은 다른 이야기이다! 쉽게 생각한다면 화면이라는 객체를 만들기 위해 붕어빵 틀(.xml)과 붕어빵이라는 것을 만들기 위한 재료(.kt)가 합쳐져 붕어빵이 만들어진다고(화면) 생각하면 될 것 같다. 안드로이드 4대 컴포넌트 중 하나로 안드로이드를 시작하면 가장 먼저 접하기도 하고 결국에 Client가 보는 화면이라 가장 중요한 파일이기 때문에 4대 컴포넌트라고 ‘일단은’ 생각하자. 어떻게 만드는가? 알거라고 생각한다. Empty 프로젝트로 “직접 타이핑해서 뷰의 컴포넌트를 만들겠다!” 도 좋은 생각이지만 개인적으로 제공해주는 다른 Activity로 생성을 해보는 것을 추천한다(ex: Login.. 더보기