Android(98)
-
android:exported 속성 필수 이유 (Android 12 대응)
Android 12(API 31) 이상부터는 Intent-filter가 설정된 컴포넌트(Activity, Service 등)는반드시 android:exported를 명시해야만 한다.명시하지 않으면 Manifest 병합 시 에러가 발생해서 앱이 아예 빌드되지 않는다. ▶️ true: 외부 앱에서 이 Activity 실행 가능 (런처 진입점 등)▶️ false: 내부 컴포넌트 (BroadcastReceiver 등 내부 호출만 허용) 몰랐을 땐 그냥 안 써도 되던 거지만,이제는 무조건 써야 하는 필수 속성임을 알게 됐다.
2025.03.24 -
[Jetpack WebView] shouldOverrideUrlLoading vs shouldInterceptRequest 완벽 정리
Android WebView를 사용할 때, 두 가지 중요한 메서드가 있다.shouldOverrideUrlLoadingshouldInterceptRequest이 두 가지를 제대로 이해하면, WebView에서 원하는 동작을 제어하고, 네트워크 요청을 최적화 할 수 있다.하지만, 두 메서드의 차이를 정확히 모르면 잘못된 방식으로 WebView를 컨트롤 하게 될 수도 있다. 1. shouldOverrideUrlLoading란?“ 웹뷰가 URL을 어떻게 처리할지 결정하는 메서드 ”(1) 역할WebView가 새로운 URL을 로드할 때, 이를 가로채서 직접 처리할지 결정한다.특정 URL을 WebView에서 로드할지, 외부 브라우저에서 열지, 차단할지 등을 제어한다.(2) 예시특정 링크만 Webview에서 호출하고,..
2025.03.20 -
좀비 같은 Activity 처리하기, finish()와 finishAActivity()의 차이
회사 앱에서 Crash가 발생하였다.로그를 확인하여 예상 시나리오로 재현을 했더니 분명 Finish 시켰던 Activity가 다시 나타나며 발생한 Crash.그럼 Finish가 정확하게 된게 아닌건가? AActivity 호출 -> AActivity finish() -> CActivity 호출 -> 화면꺼짐(sleep) -> BActivity 호출(push 알람을 통한) -> BActivity finish() -> AActivity 호출-> AActivity finish() -> BActivity 부활(좀비) 아니 Finish를 시키면 결국 Activity는 죽어야 하는거 아닐까?✔ finish() 후에도 Activity가 다시 나타나는 이유Activity가 백스택에서 제거되지 않고 남아 있음finish(..
2025.03.10 -
안드로이드 모듈 간 리소스 충돌 방지: 리소스 ID와 모듈 의존성
안드로이드 프로젝트에서 여러 모듈을 사용하는 경우, 리소스 충돌을 피하기 위한 전략이 중요하다.특히 string, drawable, color와 같은 리소스 파일을 다룰 때,리소스 ID가 어떻게 관리되는지 모듈 간 의존성에 대한 이해가 필요하다. 1. 리소스 ID는 이름과 위치에 따라 결정된다.안드로이드에서 각 리소스(string, drawable, color 등)에 대해 고유한 ID가 자동으로 할당된다.이 ID는 리소스 이름과 해당 리소스가 위치한 모듈에 따라 결정된다.따라서 동일한 리소스 이름을 가진 string 파일이 core 모듈과 feature 모듈에 존재한다면,각 모듈에 대해 각각의 ID가 할당된다. 2. 리소스 이름이 같으면 동일한 ID가 할당된다.하지만 모듈마다 ID가 부여될 뿐, 그 ID..
2025.03.05 -
Jetpack Compose에서 TextField와 OutlinedTextField의 차이점
1. TextField기본적인 Material Style의 입력 필드내부에 밑줄이 있는 형태Material Design System에서 기본적으로 제공하는 스타일보통 일반적인 텍스트 입력 필드에 사용TextField( value = text, onValueChange = { text = it }, label = { Text("기본 TextField") })2. OutlinedTextField테두리가 있는 입력 필드OutlinedTextField는 사각형 외곽선(border)이 있는 형태더 명확한 경계를 제공하여 구분이 필요한 경우 사용3. 사용 시점TextField기본적인 입력 필드가 필요한 경우배경과 자연스럽게 어울려야 하는 경우OutlinedTextField입력 필드를 더 명확하게 구..
2025.02.28 -
Compose에서 네비게이션을 통한 데이터 전달 및 savedStateHandle 활용
프로젝트 구축하는 과정에서 문제가 하나 발생했다. ✅ 문제 상황AScreen에서 BScreen으로 화면 이동 후 BScreen에서 선택한 값을 AScreen으로 돌려주기이 때, ViewModel을 통해 돌려주면 viewModel이 초기화 되는 이슈 발생✅ 해결 방법NavController의 savedStateHandle을 이용하여 화면 간 데이터 전달ViewModel을 통해 데이터를 전달할 때, 전달된 데이터가 초기화 되는 현상이 발생했다.당연하다. ViewModel을 새로 만드는 멍청한 짓을 했으니까 ㅋ 그래서 찾아낸 다른 방법! NavController 이용하기~화면을 이동할 때 사용하는 Navigation Component는 데이터를 전달하는 savedStateHandle을 지원한다.이걸 활용하면 ..
2025.02.26