본문 바로가기

안드로이드

(26)
Looper와 Handler Looper? - (loop)+er 뭔가 반복해서 실행하는 것 - TLS(thread local storage)에 저장되고 꺼내어진다. - ThreadLocal 에 set() 메서드로 새로운 Looper을 추가하고, get() 메서드로 스레드별로 다른 Looper가 반환된다. - Loper 별로 MessageQueue를 가짐 Looper에게 MessageQueue란 Looper는 MessageQueue를 통해서 UI 작업에서 경합 상태를 해결한다. MessageQueue에서 꺼낸 Message가 null이 될 때는 Looper가 종료될 때이다. quit()와 quitSafely() 메서드 차이 둘 다 Looper를 종료시키는 메서드다. quit()는 아직 처리되지 않은 Message를 모두 제거한다. q..
안드로이드 호환성 모드 앱이 동작하는 안드로이드 버전을 지정하기 위해서는 minSdkVersion과 targetSdkVersion에 버전을 기재한다. 안드로이드 스튜디오에서는 build.gradle에 기재하여 AndroidManifest.xml의 내용을 오버라이드할 때가 많다. targetSdkVersion은 반드시 지정 targetSdkVersion을 명시하지 않으면 minSdkVersion과 동일한 값으로 지정된다. 그러면 호환성 모드 이슈를 겪을 가능성이 생긴다. targetSdkVersion을 지정한다는 의미는 해당 버전까지 테스트해서 앱을 실행하는 데 문제 없다는 의미이고, 그 버전까지는 호환성 모드를 쓰지 않겠다는 뜻이다. targetSdkVersion은 가급적 높게 지정 결론적으로 단말 버전에 따라 최신 기능을 쓸..
StateFlow를 알아가는 과정 (Flow, LiveData) StateFlow를 알기전에 Cold? Hot? 이 뭘까? StateFlow를 위해 Android Developer 가이드의 문서를 읽어봤을때 핫 플로우, 콜드 플로우라는 설명이 있어서 이해할 수 없었다. 이 개념은 RxJava에서 나온 개념으로 보인다. - Cold: 호출되면 구독자가 처음부터 데이터를 발행할 수 있는 것 ㄴ ex) Flow, DB쿼리, 파일 읽기 - Hot: 구독자를 신경쓰지 않고 데이터를 계속 발행시키는 것으로 구독한 이후에 이벤트에 대해서만 알 수 있는 것 ㄴ SharedFlow, StateFlow, 마우스 이벤트, 키보드 이벤트 하나의 스트림을 여러번 Subscibe해야 하는 경우에는 Hot Observable을 사용하자 Flow에 대해서 알아보자 - Kotlin에서 Flow는 ..
Dagger2 - Android Dagger2는 의존성 주입(DI) 프레임워크입니다. Dagger2를 사용하면 보일러 플레이트 코드가 감소한다는 장점이 있습니다. Dagger 기본 개념 Inject @inject 어노테이션으로 주입을 요청하면 연결된 Component가 Module로 부터 객체를 생성하여 넘겨준다. Component 주된 역할을 하는 객체로 연결된 Module을 이용하여 의존성 객체를 생성하고 Inject로 요청받은 인스턴스에 생성한 객체를 주입한다. Subcomponent Compnent는 하위계층 Component로 그래프를 형성할 수 있다. Module component에 연결되어 의존성 객체를 생성합니다. Scope 생성된 객체의 Lifecycle 범위이다. @Provide vs @Binds 이 둘 모두 Modu..
안드로이드 include vs merge 태그 차이 include 똑같은 태그를 여러번 반복해야할 때 include 태그로 레이아웃 중복을 없앨 수 있다. 하지만 뷰그룹으로 묶어줘야하기 때문에 뷰 계층이 깊어진다는 단점이 있다. merge 뷰그룹으로 감싸주지 않고 그냥 단순히 merge 태그로 시작하면 된다. 그러면 include가 되는 순간 merge 태그는 사라지고 그 안의 내용물만 바로 붙게된다. include의 단점이 사라지는데 대신 merge는 뷰 그룹을 생성하지 않음으로써 include와 달리 id 사용이 제한적이다. include할 때 사용하는 id도 사라지게 된다.
AlertDialog Dialog 전체화면을 다 채우지 않고 일부 화면만 가리는 윈도우, 사용자가 예/ 아니오 같은 선택을 하거나 추가적인 정보 입력을 기다린다. 사용자가 응답하기 전까지는 화면에서 사라지지 않고 대기하며 프로그래밍 코드도 잠시 대기상태가 된다. AlertDialog의 구성요소 - Title 다이얼로그의 제목 - Content 사용자에게 보여줄 내용으로 문자열, 리스트, 커스텀 레이아웃이 가능 - Button Posivite Button , Negative Button, Neutral Button(Later 결정을 연기) AlertDialog를 생성하기 위해서 먼저 AlertDialog.Builder 객체를 생성하고 이 객체의 메소드를 호출해서 속성을 지정하고 생성한다. AlertDialog.Builder b..
안드로이드 접근성 accessibility 에 관하여 요즘 앱개발을 하면서 접근성 이슈가 많이와서 한번 정리해둘까 싶어서 작성하는 포스팅입니다. 간단하게는 view에 contentDescription 속성을 넣어서 포커싱 되었을때 어떻게 읽어줄 지를 정해 줄 수 있습니다. 또한, importantForAccessibility="no" 를 설정하여 필요없는 정보를 읽어주는 것을 예방할 수 있죠. 이런 포커스 관리하는 방법 중 일부로 View setAccessibilityTraversalAfter/Before 를 이용하는 방법이 있다고 합니다. AccessibilityDelegate() 뷰에 대한 접근성을 커스터마이징하고 싶다면 AccessibilityDelegate()를 오버라이딩하여 설정할 수 있습니다. 몇 가지 메소드에 대해서 알아봅시다. - sendAc..
Android Room 혹시 Android 개발할 때 Room을 못들어보신 분은 없죠? Jetpack이 제공하는 데이터베이스 아키텍처(database architecture)입니다. [Android Developer Document] developer.android.com/training/data-storage/room?hl=ko Room을 사용하여 로컬 데이터베이스에 데이터 저장 | Android 개발자 | Android Developers Room 라이브러리를 사용하여 더 쉽게 데이터를 유지하는 방법 알아보기 developer.android.com 가이드는 공식가이드를 한번씩 읽어보시는게 좋겠습니다. SQLite는 모두 아시죠? Android 내장 데이터베이스! 안드로이드 입문서에도 적혀있으니 모르는 분 없을 것이라고 생각..