본문 바로가기

반응형

Android

Coroutine vs Thread, 코루틴, 쓰레드 차이 - 코틀린 동시성 코틀린에서 코루틴은 종종 경량 쓰레드라고 표현되며, 이러한 표현은 코루틴이 프로세서가 실행해야 하는 명령어 집합의 실행을 정의하며, 쓰레드와 비슷한 라이프사이클을 가진다는 점에서 어느 정도 알맞은 표현이라고 할 수 있습니다. 그러나 하나의 쓰레드에 두 개 이상의 코루틴이 존재할 수 있으며, 한 실행 시점에는 하나의 쓰레드에서 하나의 명령만 실행 가능합니다. 코틀린은 고정된 크기의 쓰레드 풀을 사용하고, 코루틴은 실행 시점의 상황에 따라 각 쓰레드에 배포됩니다. 이를 통해 1개의 코루틴을 생성하는 코드와 1000개의 코루틴을 생성하는 코드의 실행 시간 차이는 크게 나지 않습니다. import kotlinx.coroutines.* import kotlin.system.measureTimeMillis susp.. 더보기
안드로이드 RoomDatabase in Java 이전에도 Room에 관해 글을 쓴 적이 있었지만, 여전히 이해가 가지 않는 부분이 있어 보충 설명을 위해 글을 작성합니다... Kotlin 이슈 7 Room 사용하여 안드로이드 로컬 db 시작하기 위시리스트를 저장하고 싶어! 안드로이드 어플에 데이터를 저장하는 방법은 여러가지가 있지만, 저는 서버가 없는 관계로 로컬 db인 SQLite를 사용하기로 했습니다. Room 은 SQLite 성능을 최대화하 roomedia.tistory.com RoomDatabase 소개 RoomDatabase는 DB 생성, 쿼리 등에 필요한 모든 작업을 캡슐화 해놓은 라이브러리로, Entity(Table), SQLite(Database), DAO(Data Access Object)로 구성되어 있으며, 쿼리에 대한 runtime.. 더보기
#Broadcast Receiver 비동기 백그라운드 작업 #doAsync #JobScheduler Broadcast Receiver가 프로세스 상태에 미치는 영향 BroadcastReceiver가 onReceive() 메서드를 코드를 실행 중일 때, 해당 수신자는 포그라운드 프로세스로 간주됩니다. 메모리가 부족하지 않은 이상 시스템은 프로세스를 계속 실행합니다. onReceive() 메서드가 반환되면 BroadcastReceiver는 비활성 상태로 전환되며, 프로세스의 우선순위는 다른 프로세스와 같아집니다. manifest에서 선언된 Static Receiver의 경우 onReceive() 반환 시 프로세스의 우선순위가 낮아지며, 리소스가 부족한 상황에서 우선순위가 높은 프로세스의 리소스 요청에 의해 이 프로세스가 종료될 수 있습니다. BroadcastReceiver가 장시간 실행되는 백그라운드 작업.. 더보기
#BroadcastReceiver 부팅 시 실행, android.intent.action.BOOT_COMPLETED 받기 BroadcastReceiver 부팅 시 실행하기 AndroidManifest.xml에 권한을 추가하고, 해당 액션을 브로드캐스트 리시버에 등록한 뒤, 앱을 삭제 후 재설치 합니다. Log.d(TAG, log) Toast.makeText(context, log, Toast.LENGTH_LONG).show() } } } } val br = MyBroadcastReceiver() 2. 인텐트 필터를 생성하고 리시버를 등록합니다. val filter = IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION).apply { addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED) } registerReceiver(br, filter) 로컬 브로.. 더보기
Android Context란 무엇일까? 안드로이드 프로그래밍을 하며 제일 흔하게 인자로 사용되는 타입이 Context인 것 같습니다. Context를 잘못 사용하면 앱이 비정상 종료되거나 메모리 누수가 발생하기도 하죠. 그렇다면 Context는 정확히 어떤 것을 가리키는 말일까요? 오늘은 Android의 핵심, Context에 대해 알아보겠습니다. developer.android.com/reference/android/content/Context Context | Android 개발자 | Android Developers developer.android.com Android 개발자 사이트 Context는 애플리케이션 환경에 대한 글로벌 정보를 갖는 인터페이스입니다. Context는 Android 시스템에서 구현체를 제공하는 추상 클래스로, 애.. 더보기
View Binding = findViewById 대체하는 방법, View Binding과 Data Binding 차이 Android를 시작하면서 제일 처음 접하는 구문은 단연 findViewById라고 할 수 있을 것 같습니다. 쉽게 접하는 것과 별개로 findViewById는 다음과 같은 문제를 가지고 있습니다. 현재 레이아웃에 존재하지 않는 View ID를 인자로 전달할 경우 Null Pointer Exception이 발생합니다. View를 잘못된 타입으로 캐스팅하여 Class Case Exception이 발생할 위험성이 존재합니다. 레이아웃 파일과 코드가 일치하지 않은 경우 런타임 오류가 발생합니다. findViewById는 레이아웃 태그를 순회하여 일치하는 뷰를 찾아가기 때문에 연산 속도에 영향을 미치고, 단순 바인딩 코드가 길어집니다. 이러한 불편 때문에 findViewById를 대체할 방법으로 Data Bin.. 더보기
#Volley 로 안드로이드 앱에 #API #JSON 연결하기 API는 무엇일까요 우리가 만드는 애플리케이션이 기존에 존재하는 외부 서비스에서 제공하는 기능을 사용하기 위해서는 API, Application Programming Interface를 사용하여야 합니다. API는 서비스가 다른 서비스를 위해 외부로 노출하는 포장의 일종이며, 실제 데이터 처리나 일련의 과정은 백엔드, 서버에서 이루어집니다. 반환되는 데이터는 일반적으로 JSON, XML 형태로 제공됩니다. API 개념은 안드로이드 앱에만 적용되는 것이 아닌, 네트워크를 통해 이루어지는 프로그램과 백엔드 서버의 통신을 중개하는 Wrapper 전체를 말합니다. API 사용을 위한 준비 외부 서버와 통신하기 위해서는 HTTP 프로토콜에 대해서 알아야 하고, 네트워크 구조에 대해서 알아야 합니다. 문제는 이 과.. 더보기
안드로이드 데이터 바인딩 in Java Hello World! TextView label = findViewById(R.id.textview); label.setText("Hello World!"); findViewById(...) 안드로이드를 처음 배울 때 제일 많이 사용한 구문입니다. 그러나! 해당 구문은 레이아웃 파일이 커질수록, 찾는 요소가 많아질수록 비용이 커지기 때문에 사용하지 말아야 합니다... 내부적으로 findViewById(...) 구문은 다음과 같이 작용합니다. 안드로이드는 매번 findViewById(...) 구문이 호출될 때마다 레이아웃 파일 트리를 순회하며 해당하는 요소를 찾습니다. 그러니 레이아웃 파일이 많아지거나 찾는 요소가 많아질수록 시간이 늘어날 수 밖에 없는 구조이지요. 구글 엔지니어들은 Data Bindin.. 더보기

반응형