본문 바로가기

전체 글

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 시스템에서 관심 있는 이벤트가 발생할 때 브로드캐스트를 전송할 수 있다. 이를 감지하고 그 리시버가 있는 앱으로 전달해주는 역할을 한다. 기기와 앱에 대한 메세징 시스템이라고 생각하면 될 것 같다. 💡 백그라운드에서 많이 돌려버리면 메모리 초과가 생기고 배터리가 많이 닳게 된다. 특히 암시적 브로드 캐스트는 수.. 더보기
안드로이드 서비스 + Notification(음악플레이어 컨트롤) 음악 플레이어 및 다음 노래, 노티에 타이틀 제목 표시를 예제로 해보겠습니다. 노티피케이션에서 보낼 액션 + foreground 요청액션 지정 package com.example.mediabrowserserviceexample object Actions { private const val prefix = "com.example.mediabrowserserviceexample.action." const val MAIN = prefix + "main" const val PREV = prefix + "prev" const val NEXT = prefix + "next" const val PLAY = prefix + "play" const val START_FOREGROUND = prefix + "startfo.. 더보기
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.. 더보기