Android/네트워킹(5)
-
[Android] 특정 국가 차단하기 (SIM 정보 이용)
오늘은 Android 앱에서 특정 국가를 차단하는 기능이 필요해졌다.VPN이나 GPS보다 우회가 어렵고, 간단하게 구현할 수 있는 방법은 없을까?그 첫 번째 시도로 SIM 카드의 국가 코드를 활용해보기로 했다. 사용한 API: getSimCountryIso()안드로이드의 TelephonyManager는 SIM에 저장된 ISO 국가 코드를 반환하는 메서드를 제공한다.이 코드를 통해 사용자의 유심이 어느 국가에서 발급된 것인지 확인할 수 있다. 코드 (Kotlin)fun getSimCountryIso(context: Context): String { val telephonyManager = context.getSystemService(Context.TELEPHONY_SERVICE) as Telephon..
2025.03.27 -
Retrofit Singleton 패턴을 유지하면서 ApiService를 기능별로 분리하기
Retrofit을 이용하여 API 통신을 하려면 Retrofit 객체를 만들어야 한다.이 때, 객체에 BaseURL을 주입해줘야 하는데 대부분의 프로젝트에서는 url이 하나로 통일되지는 않을 것이다.게다가 앱 규모가 커질수록 API 호출 개수는 무수히 많아지는데이걸 하나의 파일에서 관리하기는 불가능.Retrofit 객체를 싱글톤으로 유지하면서 APIService를 기능별로 분리하려면 어떻게 해야할까?1️⃣ API 인터페이스를 기능별로 분리각 도메인(feature)별로 @Headers를 추가해서 Base URL을 구분하면 된다.✅ AServiceinterface AService { @GET("endpoint-a") @Headers("Base-Url: API_A") suspend fun ge..
2025.02.17 -
Android에서 OkHttp 통신 시 Memory를 최적화 하기 위한 체크 포인트
🌟 들어가기 전최근 회사에서 관리하는 앱이 OOM 이슈가 자꾸 일어난다.RxJava 배압 이슈인가 하고 확인해봤더니 그 원인은 아니었다. Firebase의 Crashlytics를 뜯어본 결과 OutOfMemoryError는 okhttp 통신 시 발생하였고,이 부분에서 메모리 누출이 의심되었다. 그렇다면 OkHttp 통신할 때 Memory를 최적화하기 위한 체크 포인트는 무엇이 있을까? 🔍 세부 내용1. ConnectionPool 사용 추가연결 관리를 최적화하기 위해 명시적으로 ConnectionPool을 추가하면, OkHttp에서 연결을 재사용하여 새로운 연결을 생성하거나 닫는 작업을 줄여준다.// ConnectionPool 설정 추가ConnectionPool connectionPool = new C..
2025.01.21 -
[Android/Java/Kotlin]ExecutorService
Android에서 ExecutorService는 쓰레드 풀을 생성하고 관리하는 데 사용됩니다. ExecutorService는 java.util.concurrent 패키지에 정의되어 있으며, Executor 인터페이스를 상속합니다. ExecutorService는 작업을 처리하는 쓰레드 풀을 생성하고, 작업 처리를 위한 작업 큐를 유지 관리합니다. 새로운 작업이 추가되면 작업 큐에 추가되고, 작업을 처리하기 위해 사용 가능한 쓰레드가 있으면 즉시 처리됩니다. ExecutorService를 사용하면 애플리케이션에서 여러 작업을 동시에 처리할 수 있습니다. 또한, 작업 처리를 위해 새로운 쓰레드를 생성하는 것보다 쓰레드 풀을 사용하여 성능이 향상될 수 있습니다. 아래는 ExecutorService를 사용하여 작..
2023.05.29 -
[Android/Async]Process, Thread에 대한 기본개념
Process란? 메모리에 올라와 있는 실행중인 프로그램 인스턴스. 운영체제로부터 시스템 자원을 할당받는 작업의 단 사용 중인 파일, 데이터, 프로세서의 상태, 메모리영역 주소 공간, 쓰레드 정보, 전역 데이터가 저장된 메모리 부분 등 수많은 자원을 포하하는 개념. 종종 스케줄링의 대상이 되는 작업이라고 불리기도 함. Process 상태 전이 Dispatch (ready → running): 여러 프로세스들 중 한 프로세스를 선정하여 CPU에 할당 Time Run Out (running → ready): 할당된 시간이 지나면 Timeout Interrupt Event Wait (running → waiting): I/O 입출력 발생 Wake-Up (waiting → ready): I/O 요청이 완료되면 ..
2023.02.26