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..
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..
SDK 버전을 높이기 위해 변경된 사항과 수정해야 할 사항들 중 중요하다 판단되는 것들을 알아보고 정리 Performance and battery Foreground Services (FGS) 작업 관리자 Android 13(API 33)에서는 타겟 SDK 버전과 관계없이 사용자가 "알림 창"에서 "포그라운드 서비스"를 중지할 수 있다. FGS 작업 관리자라고 하는 새로운 기능에는 현재 포그라운드 서비스를 실행 중인 앱 목록이 표시된다. 이 목록에는 활성 앱이라는 라벨이 적용되어 있다. 각 앱의 옆에는 중지 버튼이 있다. 아래 그림은 Android 13을 실행하는 기기에서 FGS 작업 관리자 워크플로를 보여준다. JobScheduler를 사용한 작업 미리 가져오기 처리 개선 JobScheduler는 앱이..
어느 순간 잘 뜨던 구글맵이 뜨지 않아 Logcat을 보았다. Authorization failure과 Ensure that the "Google Maps Android API v2" is enabled. 인증키 오류의 Log들이 찍힌 걸 확인 관련 검색을 해보면 Api가 활성화되어있나 확인해 보고 제한사항을 줄 때 패키지 이름을 제대로 주라는 말들이 대부분이다. 하지만 API도 다 활성화되어있고 제한사항의 패키지 이름과 Api 제한사항도 다 맞춰서 해놓았는데도 같은 오류가 반복되었다.. Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()..