자마린(Xamarin)

(자마린.안드로이드 서비스란?)Xamarin.Android Services, 서비스 개요

FSP 0 11 01.30 08:40

(자마린.안드로이드 서비스란?)Xamarin.Android Services, 서비스 개요

n 안드로이드 Application을 구성하는 4가지 컴포넌트 중에 하나인 Service는 Activity처럼 사용자와 상호작용 하는 컴포넌트가 아니고, 사용자 인터페이스(UI)도 제공하지 않는 백그라운드에서 주로 시간이 오래 걸리는 작업들을 처리하는 앱 컴포넌트이다.

시간이 걸리는 계산작업, 파일 다운로드, 네트워크를 통한 데이터 전송 및 수신, 음악 재생, 주기적으로 특정 웹사이트에서 데이터를 읽어 온다든지, 파일 I/O, 컨텐트 프로바이더와의 상호작용 등을 백그라운드에서 처리할 수 있다. 즉 Activity 화면에서 동작뿐만 아니라 Activity가 종료되어 있는 상태에서도 동작하기 위해서 만들어진 컴포넌트 이다.

n 모바일 장치는 제약으로 인해 다르게 작동하는데, 예를들면 휴대 기기의 작은 화면은 일반적으로 한 번에 하나의 앱 (즉, Activity) 만 표시되고 기타 Activity는 백그라운드로 이동하고 작업을 수행 할 수 없는 일시 중지 상태로 푸시된다. 그러나 Android 애플리케이션이 백그라운드에 있다고 해서 앱이 계속 작동하는 것이 불가능 하지는 않다.

n 안드로이드에서 백그라운드 작업의 기본 메커니즘은 Android Service로 사용자 인터페이스 없이 일부 작업을 수행하도록 설계된 구성 요소이다. 안드로이드 어플리케이션 간의 프로세스 간 통신 (IPC)에도 사용될 수 있다. 예를 들어 하나의 Android 앱이 다른 앱의 뮤직 플레이어 서비스를 사용하거나 앱이 데이터 (예 : 사람의 연락처 정보)를 서비스를 통해 다른 앱에 노출 할 수도 있다.

n 서비스와 백그라운드 작업의 처리능력은 유연한 사용자 인터페이스를 제공하는 데 중요하다. 모든 Android 애플리케이션에는 Activity가 실행되는 기본 스레드 (UI 스레드라고도 함)가 있는데 기기가 응답 하도록 하려면 Android는 초당 60 프레임의 속도로 사용자 인터페이스를 업데이트 할 수 있어야 한다. Android 앱이 주 스레드에서 많은 작업을 수행하면 Android가 프레임을 삭제하고 이로 인해 UI가 깜박이는 것처럼 보인다 (때로는 janky라고도 함). 즉, UI 스레드에서 수행 된 작업은 두 프레임 사이의 시간 간격 (약 16 밀리 초 (60 프레임마다 1 초)) 동안 완료되어야 한다.

n 이런 문제점 때문에 개발자는 Activity의 스레드를 사용하여 UI를 차단하는 작업을 수행함으로 인해해 문제가 발생할 수도 있는데 Android가 여러 Activity 인스턴스를 종료시키고 다시 만들 가능성이 매우 높다. 그러나 Android는 스레드를 자동으로 삭제하지 않으므로 메모리 누수가 발생할 수도 있는데 가장 대표적인 예는 휴대폰을 회전하는 경우로 Android는 Activity의 인스턴스를 종료시킨 다음 새 인스턴스를 다시 만들려고 하는데 이 경우 Android는 Activity의 인스턴스를 Destroy 시킨 다음 새로운 인스턴스를 만들려고 한다.

n Activity의 첫 번째 인스턴스에 의해 생성 된 스레드는 계속 실행되고 스레드가 Activity의 첫 번째 인스턴스에 대한 참조를 가지고 있다면 Android가 객체를 가비지 컬렉션하지 못하게 된다. 그러나 Activity의 두 번째 인스턴스는 여전히 생성되며 (이는 다시 새 스레드를 생성 할 수 있음) 빠른 속도로 연속해서 여러 번 기기를 돌리면 모든 RAM이 소모되어 안드로이드가 메모리를 회수하기 위해 전체 애플리케이션을 강제 종료 할 수 있다는 것이다.

n 처리해야 할 작업이 Activity보다 오래 지속되어야 한다면 서비스가 만들어 져야 한다. 만약 작업이 Activity 컨텍스트 내에서만 적용 가능하면 스레드를 만드는 것이 더 적절할 수 있다. 예를 들어 사진 갤러리 앱에 방금 추가 된 사진의 미리보기를 만들려면 서비스로 구현을 하는 것이 좋고, 액티비티가 Foreground에 있을 때만 음악을 재생하려면 스레드가 적합하다.

n 백그라운드 작업은 크게 두 가지로 분류 할 수 있다.

ü 장기 실행 태스크(Long Running Task) - 명시적으로 중지 될 때까지 진행중인 작업으로 음악을 스트리밍하거나 센서에서 수집 한 데이터를 모니터링 해야 하는 앱등으로 응용 프로그램에 표시되는 사용자 인터페이스가 없는 경우에도 작업이 실행 되어야 하는 경우이다.

ü 주기적 작업(Periodic Tasks) - 주기적 작업이란 비교적 짧은 기간 (수 초)으로 일정에 따라 실행된다 (즉, 하루에 한 번 또는 일주일에 한 번 또는 다음 60 초 내에 한 번만 실행 됨). 예를 들면 인터넷에서 파일을 다운로드하거나 이미지의 축소판을 생성하는 것등이 있다.

안드로이드 서비스는 실행되는 방식에 따라 4가지 유형으로 구분할 수 있다.

1. 바운드 서비스(Bound Service) - 바인딩 클라이언트(Activity등)와 서비스가 서로 상호 작용할 수 있도록 인터페이스를 제공하며 여러 클라이언트가 서비스에 바인드 될 수 있다.

2. 인텐트 서비스(IntentService) - 서비스 생성 및 사용을 단순화 하는 Service 클래스의 특수 하위 클래스로 개별적인 호출을 처리하기 위한 것으로, 여러 개의 호출을 동시에 처리 할 수 있는 서비스와 달리 IntentService는 작업 대기열 프로세서와 비슷하다. 작업은 대기열에 있고 IntentService는 스레드에서 한 번에 하나씩 작업을 처리한다.

3. Started Service(시작 서비스) – Activity와 같은 다른 안드로이드 서비스에 의해 시작된 서비스로, 서비스가 중지 되도록 명시 적으로 알릴 때까지 백그라운드에서 계속 실행된다. 바운드 서비스와 달리 시작된 서비스에는 직접 바인딩 된 클라이언트가 없고 이러한 이유로 시작된 서비스가 필요에 따라 정상적으로 다시 시작되도록 설계하는 것이 중요하다.

4. Hybrid Service(하이브리드 서비스) - 하이브리드 서비스는 Started Service와 Bound Service의 특성을 가진 서비스로 구성 요소가 구성 요소에 바인딩되거나 특정 이벤트에 의해 시작될 때 시작될 수 있고 클라이언트 구성 요소는 하이브리드 서비스에 바인딩되거나 바인딩되지 않을 수 있다. 하이브리드 서비스는 명시 적으로 중지 할 때까지 또는 더 이상 클라이언트가 바인딩되지 않을 때까지 계속 실행된다.

n 사용할 서비스 유형은 응용 프로그램의 요구 사항에 따라 다른데 일반적으로 Android 애플리케이션이 수행해야 하는 대부분의 작업에는 IntentService 또는 Bound Service로 충분하기 때문에 두 가지 유형의 서비스 중 하나를 선호한다. IntentService는 파일 다운로드와 같은 "원 샷" 작업에 적절하지만 액티비티와의 상호 작용이 빈번 할 때 바운드 서비스가 적합하다.

#자마린서비스#안드로이드서비스#자마린강좌#자마린강의#자마린교육#자마린출강#자마린#Xamarin#자마린안드로이드#Xamarin.Android, #자마린폼즈

, , , , , , , , , ,

Comments