Android

viewModelScope.launch{ RetrofitService.naverService.getSearchNews(query = keyword, sort = "sim").run{ if (isSuccessful){ ... } else { ... } } } Retrofit을 사용할 때 Coroutine과 사용하게 되면 enqueue()의 비동기 코드를 실행하는 코드가 없어도 스스로 값을 가져오게 된다. 그래서 바로 Response를 사용해 요청 이후의 응답을 바로 받아 사용을 한다. 이 동작에 대해 이해하려 한다. enequeue의 내부적 구현 Retrofit 사용 API Interface 구현체 내부적 구현 사용 개발자는 Interface에 추상적인 api 함수들을 Retrofit Annotaion과 ..
사용 개발자는 Interface에 추상적인 api 함수들을 Retrofit Annotaion과 함께 정의한다. interface NaverApi { @GET(RetrofitService.NEWS_END_POINT) suspend fun getSearchNews( @Header("X-Naver-Client-Id") clientId : String = BuildConfig.NAVER_CLIENT_ID, @Header("X-Naver-Client-Secret") clientPw : String = BuildConfig.NAVER_CLIENT_SECRET, @Query("query") query : String, @Query("sort") sort : String, ): Call } Retrofit Builde..
Service 안드로이드 4대 컴포넌트 중 하나이며 사용자에게 인터페이스를 제공하지 않고 백그라운드에서 오래 실행되는 작업을 수행할 수 있는 애플리케이션 구성요소 다른 애플리케이션 구성 요소가 서비스를 시작할 수 있고, 다른 앱을 전환하더라도 백그라운드에서 계속 실행된다. 또한 앱 구성요소와 서비스를 바인딩하여 서비스와 상호작용 할 수 있고, 프로세스 간 통신(IPC)도 실행할 수 있다. 종류 Background Service 사용자에게 보이지 않는 백그라운드 작업을 수행하며, 시스템 리소스가 부족할 경우 강제 종료될 수 있다. API 25 이상부터는 앱이 Foreground에 있지 않을 때 백그라운드 서비스를 강제로 종료시킨다. Foreground Service 만약 서비스가 백그라운드에서 계속 돌게 ..
Backgorund 작업 구분 Background 작업으로 AlarmManager나 WorkManager, Coroutine을 사용할 수 있는데 공식 문서를 보면 사용 구분에 따라 어떠한 기술을 사용해야 할지 가이드라인을 제공하고 있다. 즉시 (Immediate) 사용자와 상호작용 요구 앱의 Scope 내부에서만 유요한: Coroutine, RxJava 앱 외부 Scope에서도 유요한: WorkManager 미디어나 스마트키 위젯에 유요한: Foreground Service 정시 (Exact) 사용자와 상호작용 요구하지 않음 정확한 시간에 작동해야함 AlarmManager 지연 (Deferred) 사용자와 상호작용 요구하지 않음 정확한 시간에 작동하지 않아도 됨 WorkManager 정확한 시간에 동작하..
사용자에게 미리 알림을 주고 다른 사람과의 소통을 가능하게 하며 앱에서 보내는 기타 정보를 적시에 제공하기 위해 Android가 앱의 UI 외부에 표시하는 메시지 Notification의 구성 전체적으로는 Notification 객체에 각종 정보를 담고 이 객체를 NotificationManager로 시스템에 등록하는 구조 SDK 33 이상부터는 Notification에 대한 권한 지정과 요청이 필요하다. (33 이상에서만 해당 권한 추가 가능) ... Manager NotificationManager : 알림을 시스템에 발생시키는 SystemService getSystemService() 함수를 이용하여 NotificationManager를 얻어서 사용하거나 NotificationManagerCompa..
안드로이드에서 단순한 데이터셋을 로컬에 저장하기 위해서 흔히 기본적으로 내장되어 있는 SharedPreferences를 사용한다. 하지만 Primitive data만 저장 가능했으며, 커스텀 데이터 타입 저장을 위해 GSON을 통해 Json String으로 변환하여 저장하는 코드들이 생겨났다. 그리고 미숙한 처리에 종종 Runtime Error, ANR이 날 수도 있다. SharedPreferences 단점 실제 XML 파일 I/O 작업을 하는 것으로 UI Thread에서 작업할 경우 안전하지 않음 Runtime Exception으로부터 안전하지 않음 XML 파일이기에 외부에서 쉽게 파일을 읽을 수 있음 (DataStore도 읽을 수는 있음) 비동기 API를 제공하지만 Listener를 통해서만 값을 R..
JetBrains에서 만들어진 Kotlin을 사용하여 연결된 시스템에서 비동기 서버 및 클라이언트를 구축하기 위한 오픈 소스 프레임 워크 설치, 사용이 간편하여 실행 파이프 라인에 단계를 추가하려는 경우 확장 가능하다. Coroutine의 비동기 속성으로 인해 여러 요청 수신이 가능하고 MultiPlatform이기도 하다. 즉 서버뿐 아니라 Ktor Client를 써서 Android, iOS, JS에서 마이크로서비스를 사용할 수도 있다. Ktor Client를 쓰면 요청 생성, 응답 처리 및 인증, Json 직렬화 등과 같은 기능으로 기능을 확장할 수 있다. Creating a client application | Ktor ktor.io 구현할 Android는 Client이기 때문에 Client만 알아보..
Room을 사용 중 빌드 창 warning 문구 warning: Schema export directory is not provided to the annotation processor so we cannot export the schema. You can either provide `room.schemaLocation` annotation processor argument OR set exportSchema to false. Room 라이브러리를 사용해서 Database 스키마를 생성할 때 exportSchema 설정에 의해 위의 경고가 뜬다. exportSchema는 Boolean 타입으로 Database Schema를 폴더로 내보낼지 정할 수 있다. default 값이 true로 되어있어 경로를 지..
Android Studio Dolphin 버전에서 새로 나온 LogCat의 필터 쿼리 내 앱에서 발생하는 내용만 보기 (PIDs for the local app project) package:mine 내 앱에서 발생하는 내용에서 필터링 (ex) ViewModel 또는 UiState라는 문자가 포함된 내용만 필터링 package:mine ViewModel | UiState 패키지, 태그, 레벨 조합 package:my-package-ID, tag:my-tag, level:ERROR -를 붙여 특정 태그 제외 -tag:exclude-this-tag 정규 표현식 (~을 키값 뒤에 붙여준다) tag~:regex-tag Logcat https://brownsoo.medium.com/새로운-로그캣-필터-쿼리-a77..
bumjae
'Android' 카테고리의 글 목록