보호되어 있는 글입니다.
이번 포스팅에서는 Bound Service 를 이용해서 Local Service를 구현하는 방법에 대해 설명한다. Local Bound Service에 대한 설명에 앞서 Bound Service의 특징에 대해서 먼저 설명하겠다. 기존에 Stared Service에서는 서비스의 시작이라는 표현을 사용했지만 Bound Service는 라이브러리와 같은 동작방식을 갖기 때문에 서비스 연결 시작(Import의 개념..?) 이라는 표현을 사용한다. Bound Service의 특징 1. Started Service와 다르게 Service를 실행시킨 Component와 Bound된 Service 사이에 상호작용할수있는 인터페이스가 제공된다. Started Service는 Component가 Service를 실행시키고..
이전 포스팅에서 startService에 대해 설명했는데, startService에는 동기화 문제가 있다고 설명했다. 때문에 이를 대체할 IntentService라는 놈을 소개하겠다. 장점 1. 애초에 Sub Thread로 동작하기 때문에 별다른 Thread작업을 해주지 않아도 된다. (ANR 걱정 X) 2. 동기화 문제에 대해서 내부적으로 처리가 되어있어 신경쓰지 않아도 된다. (동기화 걱정 X) 여러 클라이언트에서 해당 Service를 시작시켜도, 순차적으로 동작하게끔 내부적으로 동기화 처리가 되어있다. 3. 구성이 간단하다. → Overriding해야하는 Method가 한개이다. 기존에 startService에서 onStartCommand에 Service에서 할 작업에 대해 작성했다면, Intent..
앞서 설명한 Local Service 를 구현하는 방법중에 하나인 startService를 통해 구현하는 방법에 대해 설명하겠다. 특징 1. 특정 서비스를 백그라운드로 동작시키는 것에 목적을 둔 형태. 2. 발생시킨 곳에서는 중단시키는 것 이외에는 어떤 제어도 불가능하다. 3. 발생시키는 곳과 서비스는 독립적이여서 Activity가 종료되어도 동작한다. Start Service의 생명주기 Start/Bound 인지에 따라서 생명주기에 차이가 있다. Service가 실행되면 onCreate - onStartCommand 생명주기 함수가 호출되고, 종료될 땐 onDestroy 생명주기 함수가 호출된다. 결국 서비스가 동작중일땐 onStartCommand의 코드가 계속해서 동작하는 것이다. 구현 1. Serv..
Service ? Service는 "특정 누군가에게 특정 기능을 제공하는 컴포넌트" 이다. Service는 안드로이드의 4대 Component중 하나로, 가장 중요하고 가장 어렵다고 한다. 화면을 가지지 않고 백그라운드에서 실행되며, 다른 컴포넌트에 의존하지 않고 독립적인 동작을 수행한다. 각종 컴포넌트에서 서비스를 제어하거나 원하는 정보를 참조할 수도 있다. Thread는 액티비티가 종료되면 객체가 소멸/초기화 됨에 따라서 이를 제어할 수 없다는 차이점이 있다. Thread 자체가 종료되는 것이 아니다. Main Thread가 종료되지 않기 때문에 자식 Thread도 여전히 살아있다. 하지만 이 자식 Thread를 컨트롤 할 수 없다. 심지어는 종료시킬 수도 없다. 혼자 막 구동되고 있는 상태. 따라서..
앱은 Main Thread와 Work Thread의 협력으로 원활하게 동작할 수 있지만, 복잡성과 스레드마다 역할을 엄격히 구분해야 하는 문제점이 있다. 안드로이드에선 개발시간 단축 및 복잡성을 줄이기 위해 다양한 Thread Helper 가 존재하는데 이번 포스팅에서는 AsyncTask 클래스에 대해서 소개한다. 하지만 AsyncTask에는 여러 문제점이 존재했고 2019년 11월 8일 6시에 공식적으로 Deprecated 되었다. AsyncTask는 전체적인 프로세스를 단순화하지만 안드로이드의 생명주기를 전혀 신경쓰지 않는다. 그렇게 때문에 액티비티나 프레그먼트가 재생성되거나 파괴었을 때 마무리 작업에 대한 내용이 보호되지 않는다. 예를 들면, 네트워크 요청과 같은 오래걸리는 작업을 Backgroun..