@WorkerThread 해당 메서드가 백그라운드 스레드(작업 스레드)에서 실행되어야 함을 나타냄 이는 CPU를 많이 사용하는 작업이나 네트워크 요청 등 UI 스레드에서 실행되면 안 되는 작업에 사용 됨 @WorkerThread fun performHeavyCalculation() { // 긴 계산이나 백그라운드 작업 수행 val result = 0 // ... 계산 로직 ... } @MainThread / @UiThread @UiThread 개발자가 실수로 백그라운드 스레드에서 UI 작업을 시도하는 것을 방지하는 데 도움이 됨 @UiThread로 표시된 메소드는 UI 스레드에서 호출되어야 함 @MainThread @UiThread와 유사하지만, 특별한 상황에선 메인 스레드와 UI 스레드가 다를 수 있으..
개발자 모드가 필요한 이유 개발자 모드를 통해서 서버 모드(상용, QA, Test)를 앱 내에서 변경할 수도 있고, 에러 발생 시 로그를 기록해줄 수도 있습니다. 또한 토큰 정보나 디바이스 정보 등과 같이 개발 및 테스트에 필요한 정보들을 바로 확인할 수 있게 됩니다. 프로젝트 특성에 따라 테스트를 위한 여러 기능들을 추가할 수도 있습니다. 이처럼 개발자 모드를 이용하면 다른 파트와의 협업 및 오류 추적, 테스트 등이 용이해집니다. 개발자 모드에 필요한 항목 사용자 정보 계정 정보 Access Token Refresh Token FCM Token AD_ID 디바이스 정보 안드로이드 버전 모델 명 기기 이름 기기 uuid 앱 버전 화면 비율 해상도 가로 너비 리소스 버킷 (ex: xxxhdpi) 서버 Ur..
안드로이드 앱을 만들 때, TextView, EditText와 같은 필드는 일관된 디자인으로 보여주는 경우가 많다. 공통으로 사용하는 다른 뷰들도 마찬가지로 매번 속성을 지정하기엔 귀찮기도하고 실수의 여지가 있어 style 태그를 활용하는게 좋다. Style 정의 적용 예시
앱 개발을 하다보면 디자인 상으로 블러 처리를 해주어야 할 때가 많은데, 이미지에 블러 처리를 해주는게 아닌 View 자체에 블러 처리가 되는 것을 원했다. 위와 같은 화면을 만들기 위해 해당 라이브러리를 이용했는데, 꽤 괜찮았었고 사용시 주의점 등을 기록하기 위해 해당 글을 작성했다. GitHub - Dimezis/BlurView: Dynamic iOS-like blur of underlying Views for Android Dynamic iOS-like blur of underlying Views for Android - GitHub - Dimezis/BlurView: Dynamic iOS-like blur of underlying Views for Android github.com 라이브러리 적용..
Fragment 위에 또 다른 화면을 띄워야 했다. 새로 띄울 화면은 배경이 반투명으로, 기존의 화면이 비쳐 보여야했기 때문에 새로운 Fragment를 띄우는 것이 아닌 View로 덮어 씌우는 방식을 선택 했다. 이런 식으로 구현하니 뒤로가기 처리가 문제가 되었는데, onBackPressedDispatcher를 이용해서 간단히 해결할 수 있었다. onBackPressedCallback 정의 private val onBackPressedCallback = object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { // 특정 뷰가 보일 떈 직접처리 if(bind.clSelectAssessment.isVisible){ hideSele..
26876번: New Time Nikolay has a digital clock that displays time in 24-hour format, showing two integers: hours (from $00$ to $23$) and minutes (from $00$ to $59$). For example, the clock can show 00:00, 18:42, or 23:59. The clock has two buttons that can be used for manual www.acmicpc.net 문제 이해 & 기본 개념 잘못된 시간과 정확한 시간이 주어지고, 1분씩 증가하는 A버튼, 1시간씩 증가하는 B버튼이 있다. 버튼을 최소 횟수로 눌러서 정확한 시간에 맞추는 문제 중요 포인트 시간..
RecyclerView StaggeredLayoutManager RecyclerView의 LayoutManager를 StaggeredLayoutManager로 아래 사진과 같은 레이아웃이 그려진다. 사진과 같이 Height에 따라 빈 공간을 채우게 되는데, 주의할 점은 인덱스가 채워지는 순서로 매겨진다는 것이다. 일반적인 Grid 레이아웃의 인덱스와는 다른 형태인 것을 볼 수 있다. ItemDecorator를 이용하여 RecyclerView 아이템에 여백을 설정할 때, 인덱스로 위치를 구분하곤 하는데, StaggeredLayoutManager에선 인덱스로 위치를 구분하긴 힘들기 때문에 조금 다른 방법을 사용해야한다. 아이템 위치 구분하기 위의 사진과 같이 아이템 끼리의 간격을 동일하게 지정해주려면, 각 ..
WebView 동영상 전체화면 안드로이드의 WebView에선 기본적으로 동영상 전체화면 처리를 해주지 않는다. 따라서, 별도로 커스텀을 해야하며 전체화면 버튼 클릭 시 새로운 화면을 위에 덮어 씌운다고 생각하면 된다. WebChromeClient 클래스를 상속 받아서 커스텀해야하고, onShowCustomView, onHideCustomView 메소드를 통해 전체화면 처리를 할 수 있다. FullScreenHolder 생성 동영상이 올라갈 배경을 지정한다. 이 클래스를 지정하지 않으면 동영상을 제외한 여백 부분이 투명하게 처리된다. private class FullScreenHolder(context:Context): FrameLayout(context) { init { setBackgroundColor..