안드로이드

· Android
DataStore - Android Jetpack 라이브러리 중 하나 - 프로토콜 버퍼를 사용하여 키-값 쌍 혹은 유형이 지정된 객체를 저장할 수 있는 데이터 저장소 솔루션 - 코루틴 및 Flow를 사용하여 비동기적이고 일관된 트랜잭션 방식으로 데이터를 저장하는 것이 특징 SharedPreferences vs DataStore DataStore 특징 - 비동기적으로 작동 (코루틴과 Flow를 통해 읽고 쓰기에 대한 비동기 API 제공) - UI 스레드를 호출해도 안전 (Dispathers.IO 밑에서 작동) - Runtime Exceptions로부터 안전 - SharedPreferences 데이터와의 병합 기능 - 일관성이 보장되는 트랜잭션 API를 제공 DataStore 종류 1) Preferences..
· Android
옥수환 - Hilt와 함께 하는 안드로이드 의존성 주입을 보고 작성했습니다. 의존성 주입 생성자 또는 메서드 등을 통해 외부로부터 생성된 객체를 전달받는 것 의존성 주입의 특징 - 클래스 간 결합도를 느슨하게 함 - 인터페이스 기반으로 설계, 코드를 유연하게 함 - Stub 또는 Mock 객체를 사용하여 단위테스트를 하기가 더욱 쉬워짐 안드로이드에서 의존성 주입 어려운 이유? - Android 클래스가 Framework에 의해 인스턴스화 됨 ( -> 클래스들 내부에 개발자가 직접 생성자를 만들거나 생성자의 매개변수를 전달할 수 있는 방법이 없음) 의존성 주입 프레임워크의 궁극적인 목표 - 정확한 사용방법을 제안 - 쉬운 설정 방법 - 중요한 것들에 집중할 수 있도록 함 Hilt 애플리케이션에서 DI를 사..
· Android
조건문 when문 다른 언어에서의 switch문과 동일 파라미터 값 : 기본 타입, 문자열 리터럴, 변수, 연산식 조건식 : 기본 타입, 문자열 리터럴, 변수, 연산식, 범위 val value: Int = 3 val value2: Int = 10 when (value) { 1 -> println()// 기본 리터럴 2/1 -> println()// 연산식 value2 -> println()// 변수 3, 5 -> println()// 콤마로 구분해서 사용 in 5..7 -> println()// 범위 값 !in 8..9 -> println() null -> println() else -> println() } 파라미터 없이 사용 val value: Int = 4 when { value == null ->..
· Android
Activity란? 더보기 - 안드로이드 앱의 4가지 구성 요소(Activity, Service, Broadcast Receiver, Content Provider) 중 하나 - 사용자 인터페이스(UI)를 포함한 화면 하나를 나타냄 - 대부분의 앱은 여러 Activity로 이루어져 있음 - 안드로이드 시스템과 안드로이드 앱의 주요 상호작용을 도움 - main() 메소드를 호출하여 프로그램을 실행하는 프로그래밍 패러다임과 달리, 수명 주기의 특정 단계에 해당하는 특정 콜백 메소드를 호출하여 Activity 인스턴스의 코드를 시작 - 모바일 앱 환경은 사용자와 앱의 상호작용이 항상 동일한 위치에서 시작되는 것은 아님 => 사용자와 앱의 상호작용에 따라 앱이 시작되는 Activity가 다를 수 있고, Acti..
· Android
BottomNavigation ( + ViewPager2) 종속성 추가 android { buildFeatures { viewBinding true } } dependencies { ... implementation "androidx.viewpager2:viewpager2:1.0.0" } 뷰바인딩을 사용하기 위해 뷰바인딩 속성도 추가해주었다! 아이템 추가 res → new → Android Resource File Resource type을 Menu로 하고 Directory name도 menu로 해서 리소스 파일을 생성해준다 해당 파일에서 사용할 아이템들을 정의해준다. 메인 레이아웃 뷰페이저 어댑터 class ViewPagerAdapter(fragment: FragmentActivity) : Fragme..
· Android
코루틴(Coroutine) CoroutineScope [ 코루틴이 실행되는 범위. 코루틴을 실행하고 싶은 Lifecycle에 따라 원하는 Scope를 생성하여 코루틴이 실행될 작업 범위를 지정할 수 있음 ] 1. 사용자 지정 CoroutineScope : CoroutineScope(CoroutineContext) // 메인 쓰레드에서 실행될 사용자 정의 Scope val scope = CoroutineScope(Dispatchers.Main) scope.launch { // 메인 쓰레드 작업 } // 백그라운드에서 실행될 사용자 정의 Scope CoroutineScope(Dispatchers.IO).launch { // 백그라운드 작업 } 2. GlobalScope : 앱이 실행될 때부터 종료될 때까지 ..
· Android
ANR (Activity Not Response) 액티비티가 응답하지 않는 오류 상황 액티비티를 작성할 때 ANR을 고려하지 않으면 앱이 수시로 종료될 수 있다 액티비티로 구성한 앱화면은 사용자 이벤트에 빠르게 반응해야 한다. 그런데 액티비티가 사용자 이벤트에 5초 이내에 반응하지 않으면 ANR 오류가 발생한다. 시스템에서 액티비티를 수행하는 수행 흐름을 메인 스레드 또는 UI 스레드라고 한다. 메인 스레드가 오래 걸리는 작업을 실행한다고 해서 그 자체로 오류가 발생하지는 않는다. 아무리 오래 걸려도 사용자가 액티비티 화면을 터치하지 않는 등 이벤트가 없다면 오류가 발생하지 않는다. 그러나 사용자가 언제 화면을 터치할 지 모르므로 액티비티를 작성할 때는 항상 ANR 오류를 고려해야 한다. 액티비티에서 시..
· Android
생명주기 Life Cycle 액티비티가 생성되어 소멸하기까지의 과정 onCreate() - 전체 수명주기 동안 한번만 발생해야 하는 기본 애플리케이션 시작 로직 실행 (초기화, viewModel 연결 등) - savedInstanceState 매개변수를 수신하는 단계 onStart() - 이 시점부터 사용자가 Activity를 볼 수 있음 onResume() - 앱이 사용자와 상호작용하는 단계. 어떤 이벤트가 발생하여 앱에서 포커스가 떠날 때까지 앱이 이 상태에 머무름 - 활동이 onPause()에서 onResume() 상태로 돌아오면 시스템이 onResume() 메소드를 다시 한 번 호출 - 활동이 onResume() 상태로 전환될 때마다 필요한 다른 초기화 작업도 수행 onPause() - 다른 Ac..
YOONJELLY
'안드로이드' 태그의 글 목록