안드로이드 스튜디오

5.4 안드로이드 스튜디오 Application Component 중 Service에 관해 알아보자.

coding art 2020. 3. 30. 16:11
728x90

 

 

Services: 멀티 프로세싱이 가능한 PC 상의 많은 코드 실행에는 사용자와의 interaction

이 없는 상황에서 항상 background 실행이 뒤따르게 마련이다. 스마트폰 사용자가 특정 activity

화면 작업 중에도 이와 무관하게 스마트폰은 내부에서 지속적으로 시간 정보를 체크한다든지 또는 외부로부터 SMS 정보를 수신하기도 한다. 이러한 서비스도 activity에서처럼 특정 서비스가 다음 사례에서처럼 전체 Service에 들어와야 할 필요가 있다.

 

아울러 AndroidManifest.xml 에서도 다음과 같이 명시되어야 한다.

 

Start Service 버튼을 클릭하면 사용자가 디바이스에서 Default_Ringtone_Uri 선택한 스마트폰 벨소리를 시작하고 Stop Service 버튼을 종료하는 서비스 지향 안드로이드 스튜디오 앱을 작성해 보자.

그림은 activity_main.xml의 간단한 버튼 디자인 레이아웃이다.

 

MainActivity에서 startService()를 실행을 통해 오직 background Services 와 통신하기 위한 클라스 MyService를 불러낸다. 이 방식은 제약이 없는 Unbound 형이다.

 

    클라스 MyService에서 onBind() 명령 실행을 통해 클라이언트와 binding이 이루어진다. 현재의 코드에서는 클라이언트가 MainActivity 하나이므로 onBind() 된 상태에서 서비스가 이루어지지만 이미 한번 onBind() 했기 때문에 만약 클라이언트 수가 늘어나더라도 동일한 서비스를 사용할 수 있다.

 

 

 

Services 코드 실행 화면에서 Start Service 버튼을 클릭하면 “Service Started” Toast 메시지가 출력되며 설정되어 있는 반복적으로 벨 소리가 흘러나오며, Stop Service 버튼을 클릭하면 끝난다.안드로이드 스튜디오에서 게임과 같은 엔터테인먼트 코드를 작성 시에 게임 OST 벨소리를 서비스 처리 할 수 있을 것이다.

  

첨부된 코드를 다운 받아 실행해 보자.

Services.zip

 

안드로이이드 스튜디오 안드로이드 코드를 구성하는 중요 요소로는 4가지(Activities, Services, Broadcast Receivers, Content Providers)를 들 수 있는 데 그 중에서 activity는 사용자 인터페이스 기능을 포함하는 스마트폰 화면 단위로 볼 수 있다. 즉 하나의 스마트폰 application(app)의 경우 여러 activity들이 조합된 것이다. activity 별로 사용자 인터페이스 기능이 사용되면 또 다른 activity 로 전환될 수도 있을 것이다.

 

이메일 작업의 예를 든다면 이메일 리스트를 보여주는 것이 하나의 activity를 구성한다. 아울러 이메일 작성도 또 하나의 activity 가 될 것이며 반면에 이메일을 열어서 읽을 수 있는 상태 자체도 activity 가 될 것이다. 이와 같이 여러 개의 activity들로 구성되는 경우에는 app(application)이 시작(launch)될 때 그 activity들 중의 하나가 스마트폰 화면에 보이도록 지정이 되어 있어야 한다.

 

하지만 안드로이드 스튜디오 코드 작업 어디에서나 activity처리 문제에 직면하게 됨으로 집중적으로 activity에 관해서 설명할 필요는 없는 듯하다. 실제로 하나의 서브클래스로 볼 수 있는 특정 activity가 포함됨으로 인해서 전체 Activity가 확장된다. MainActivity 하나만 있는 간단한 형태의 안드로이드 스튜디오 코딩에서 볼 수 있듯이 MainActivity가 하나의 특정한 activity 로서 코드 전체의 Activity에 들어와야 하며 다음과 같이 나타낼 수 있다.

 

한편 import 되는 라이브러리 명칭 import ∙∙∙.AppCompatActivity에서 Compat을 포함하는 명칭의 특수성은 다음과 같이 최근의 예를 들면 TensorFlow 2.0 버전의 import 과정에서도 유사한 사례를 찾아 볼 수 있다. 즉 엇비슷한 명칭을 하도 쓰다 보니 좀 더 차별성 있게 표현하기 위해서 도입한 듯하다.

 

 

Services.zip
0.14MB