1 / 38

서비스

16. 서비스. 학습목표 서비스는 백그라운드에서 실행되는 프로세스이다 . 사용자와 상호작용 없이 배경에서 지속적으로 실행되는 데몬 제작 방법에 대해 실습하고 데몬이 사용자에게 알림을 보낼 수 있는 통지와 알람 등의 기술을 익힌다 . 내용 통지 BR 서비스. 1. 통지. 백그라운드 알림 통지 ( Notification ) : 백그라운드 프로세스가 사용자와 통신할 수 있는 좀 더 확실한 방법

jeneil
Download Presentation

서비스

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 16 서비스

  2. 학습목표 • 서비스는 백그라운드에서 실행되는 프로세스이다. • 사용자와 상호작용 없이 배경에서 지속적으로 실행되는 데몬 제작 방법에 대해 실습하고 데몬이 사용자에게 알림을 보낼 수 있는 통지와 알람 등의 기술을 익힌다. • 내용 • 통지 • BR • 서비스

  3. 1. 통지 • 백그라운드 알림 • 통지(Notification) : 백그라운드 프로세스가 사용자와 통신할 수 있는 좀 더 확실한 방법 • 통지는 최초 잠깐 보이지만 토스트와 달리 사용자가 확인하기 전에는 아이콘이 계속 표시되며, 소리나 진동, 불빛 같은 좀 더 적극적인 방법으로 사용자에게 신호를 보낸다. • 상태란을 아래로 드래그하여 확장하거나 Home화면 메뉴에서 Notification항목을 선택하면 통지에 대한 상세한 정보가 출력된다.

  4. 1. 통지 • 백그라운드 알림 • 통지를 출력하려면 통지 관리자(NotificationManager)와 통지 객체(Notification) 둘을 사용해야 하는데 미리 준비해야 할 것이 많아 번거롭다. • 통지 객체의 생성자는 다음과 같다. • Notification(int icon, CharSequencetickerText, long when) • Icon은 상태란에 표시될 작은 그림, tickerText는 통지 영역에 아이콘이 처음 나타날때 잠시 출력될 짧은 문자열이며, when은 통지가 발생한 시간을 지정하여 System.currentTimeMillis메서드로 구한 현재 시간을 지정하는 것이 보통이다. • 생성자로 객체를 생성한 후에도 icon, tickerText, when 등의 필드에 값을 직접 대입하여 통지의 내용을 변경할 수 있다. • 실행 중에도 언제든지 값들은 변경 가능하다.

  5. 1. 통지 • 백그라운드 알림 • 필드들에 값을 대입함으로써 통지를 전달하는 방법을 다음과 같이 상세하게 지정한다.

  6. 1. 통지 • 백그라운드 알림 • 시스템은 디폴트 소리와 진동 기능을 제공하는데 defaults필드에 어떤 기능을 시스템이 제공하는 디폴트로 사용할 것인가를 다음과 같이 지정한다. • flag 필드에는 통지의 동작 및 관리방법을 다음과 같이 지정한다.

  7. 1. 통지 • 백그라운드 알림 • 속성을 설정한 후 확장 상태란에 표시될 정보와 사용자가 통지 객체를 선택했을 때의 반응을 다음 메서드로 지정한다. • void setLatestEventInfo (Context context, CharSequencecontentTitle, CharSequencecontentText, PendingIntentcontentIntent) • 확장 상태란 : 타이틀 영역보다 넒으므로 조금 더 길고 상세한 메시지를 전달할 수 있다. • PendingIntent클래스는 인텐트를래핑하며 다른 응용 프로그램으로 전달하여 실행 권한을 준다는 점에서 보통의 인텐트와 다르다. • Intent는 사용자가 통지 객체를 탭했을 때의 동작을 지정하며, 주로 액티비티를 띄우는데 인텐트에는FLAG_ACTIVITY_NEW_TASK플래그를 지정해야 한다. • 통지 관리자는 시스템이 제공하는 서비스이므로 객체를 직접 생성할 필요 없이 다음 호출문으로 구한다. • getSystemService(NOTIFICATION_SERVICE)

  8. 1. 통지 • 통지 출력 • 통지 기능을 이용한 예제를 통해 실습해 보자.

  9. 1. 통지 • 통지 출력 • 통지 기능을 이용한 예제를 통해 실습해 보자.

  10. 1. 통지 • 커스텀통지 뷰 • 확장된 상태란에 출력되는 문자열들은 setLatesEventInfo메서드로 간편하게 지정할 수 있다.

  11. 1. 통지 • 커스텀통지 뷰 • 통상적인 뷰로 생성해서 안되면 프로세스의 경계를 넘어 출력할 수 있는 RemoteView클래스의 객체를 생성해야 한다. • 생성자로 패키지 이름과 레이아웃 리소스의 id를 전달한다. • RemoteViews(String packageName, intlayoutId) • 이미지와 텍스트 내용이 고정적이라면 XML파일에 미리 대입해 놓는 것이 편하며, 통지의 내용에 따라 가변적이라면 다음 메서드로 이미지와 텍스트를 실시간으로 결정해서 대입한다. • setImageViewResource(intviewId, intsrcId) • setTextViewText(intviewId, CharSequence text)

  12. 2. BR • 방송 • 방송을 청취하려는 응용 프로그램은 BR(Broadcast Receiver : 방송 수신자)를 작성해 두고 관심 있는 방송을 수신한다. • BR은 안드로이드 응용 프로그램을 구성하는 4개의 컴포넌트 중 하나로서 오로지 방송 수신 대기만 하며 사용자와 직접 대면은 하지 않는다. • BroadcastReceiver클래스로부터 상속받으며 방송을 수신하는 다음 메서드를 재정의 한다. • void onReceive (Context context, Intent intent) • 방송이 수신되면 onReceive메서드가 호출되며, context는 BR이 실행되는 컨텍스트이며 intent는 수신된 방송 내용이다. • BR은 프로세스의 메인 스레드에서 실행된다. • 10초 내로 onReceive메서드가리턴하지 않으면 시스템은 응답이 없는 것으로 판별하여 강제로 죽인다.

  13. 2. BR • 방송 • 방송은 응용 프로그램끼리 통신하는 공식적인 수단을 활용하는데 응용 프로그램이 방송을 할 때는 다음 메서드로 호출한다. • void sendBroadcast (Intent intent [, String receiverPermission]) • void sendOrderedBroadcast (Intent intent, String receiverPermission) • Intent인수는 전달하고자 하는 방송 내용이며 액션에 방송의 주 내용을 대입하며 인텐트의 다른 필드에 추가 정보도 전달할 수 있다. • 일반 방송은 비동기적으로 동작하여 호출 시 즉시 리턴한다. • 순서 있는 방송은 인텐트 필터의 android:priority속성이 지정하는 중요도에 따라 수신 순서가 결정되어 차례대로 전달된다.

  14. 2. BR • 방송 (실습 예제)

  15. 2. BR • 방송 • 액티비티가 실행중인 동안만 방송을 수신하려면 코드에서 BR을 일시적으로 등록 해 놓을 수 있으며, 필요할 때만 방송을 수신하려면 매니페스트에 등록할 필요없이 다음 메서드로 등록 및 해제 한다. • Intent registerReceiver (BroadcastReceiver receiver, IntentFilter filter) • void unregisterReceiver (BroadcastReceiver receiver) • 등록 메서드로BR객체와 인텐트 필터를 전달한다. • BR을 등록하는 최적의 시점은 onResume이며 등록을 해제할 최적의 시점은 onPause이다.

  16. 2. BR • 방송 (실습 예제2)

  17. 2. BR • 방송 (실습 예제2)

  18. 2. BR • 배터리감시 • 모바일 장비는 항상 배터리로 동작하며 배터리가 없으면 아무것도 할 수 없으며 배터리의 남은 양은 모든 응용 프로그램이 관을 가져야 할 중요한 정보이다. • 배터리와 관련된 방송들은 다음과 같이 여러 가지가 있다. • 대개의 경우 ACTION_BATTERY_CHANGED방송만 청취해도 변화는 다 알아낼 수 있다.

  19. 2. BR • 배터리감시 • 배터리 상태에 대한 상세한 정보는 인텐트의Extras에 실려 방송 수신자에게 전달된다 • 조사 가능한 값들은 BatteryManager클래스에 상수로 정의되어 있다.

  20. 2. BR • 배터리감시 (실습 예제)

  21. 2. BR • 배터리감시 (실습 예제)

  22. 2. BR • 배터리감시 (실습 예제)

  23. 2. BR • 배터리감시 • 에뮬레이터는 배터리를 쓰지 않기 때문에 충전의 개념이 없으며 테스트해 보기 쉽지 않으며 항상 충전 중으로 표시되며 충전 레벨은 50%로 고정되어 있다. • 에뮬레이터에서 테스트 해보려면 텔넷으로 에뮬레이터에 접속한 후 배터리의 상태를 인위적으로 변경하는 명령을 다음 실행과 같다. • telnet localhost 5554 • 5554는 에뮬레이터와 연결되는 포트 번호이며 에뮬레이트넌 통상 5554번이다. • 텔넷이 없는 시스템에서는 Zterm이나 putty같은 공개 텔넷 프로그램을 사용할 수 있다.

  24. 2. BR • 배터리감시 • Putty로 에뮬레이터에 접속하는 모습은 다음과 같다.

  25. 2. BR • 배터리감시 • 텔넷에 접속한 후 다음 명령으로 에뮬레이터의 배터리 상태를 변경해 볼 수 있다.

  26. 2. BR • SD 카드 감시 • 안드로이드는SD카드를 외부 저장 장치로 사용하며 데이터 파일은 모두 SD 카드에 저장해야 한다. • SD카드는 장비의 전원이 들어와 있는 상태에서 언제든지 삽입, 분리, 교체가 가능하다. • SD카드와 관련된 방송 액션은 다음과 같다.

  27. 2. BR • SD 카드 감시 (실습 예제)

  28. 2. BR • SD 카드 감시 (실습 예제)

  29. 2. BR • 알람 • 알람은 미리 지정해 놓은 시간에 이벤트를 방생시키는 시스템 장치이다. • 알람은 운영체제가 관리하며 응용 프로그램 외부에서도 설정 가능하다. • 알람은AlarmManager클래스로 관리하며, 시스템 서비스이며 공개된 생성자가 없으므로 직접 생성할 수 없으며 컨텍스트의 다음 메서드로인스턴스를 구한다. • Context.getSystemService(Context.ALARM_SERVICE); • 알람 매니저의 다음 메서드로알람을 등록하며 한번만 동작하는 알람과 주기적으로 반복하는 알람 두 가지 종류가 있다. • void set (int type, long triggerAtTime, PendingIntent operation) • void setRepeating (int type, long triggerAtTime, long interval, PendingIntent operation) • set메서드는 딱 한번만 동작하는 알람을 등록하며 setRepeating은 주기를 정해 놓고 반복적으로 동작하는 알람을 등록한다.

  30. 2. BR • 알람 • 인수type은 예약 시간을 해석하는 방법과 예약 시간에 장비가 슬립 모드일 때 장비의 기동 여부를 지정하는데 다음 4가지 값 중 하나를 사용할 수 있다. • triggerAtTime인수는 알람을 기동할 시간을 지정하는데 포맷은 type에 따라 달라진다.

  31. 2. BR • 알람(실습 예제)

  32. 2. BR • 알람(실습 예제)

  33. 3. 서비스 • 데몬 • 서비스는 백그라운드에서 실행되며 사용자와 직접적인 상호작용은 하지 않는다. • 클라이언트에서 어떤 식으로 호출하는가에 따라 다음 두 가지 사용 방법이 있다. • 백그라운드 데몬 : 배경에서 계속 실행되는 프로세스이다. • 원격 호출 인터페이스 : 클라이언트를 위한 특정한 기능을 제공하는 역할은 한다. • 서비스의 생명주기는 액티비티에 비해서 아주 단순하다.

  34. 3. 서비스 • 데몬 (실습 예제)

  35. 3. 서비스 • 데몬 (실습 예제)

  36. 3. 서비스 • 원격 인터페이스 • 안드로이드는 원격 인터페이스를 정의하는 AIDL이라는 별도의 언어를 제공하며 AIDL컴파일러가 인터페이스 정의를 구현하는 스텁까지 생성해 준다. • AIDL소스를 작성하여 프로젝트에 포함시켜 놓으면 AIDL컴파일러가 인터페이스를 구현하는 자바 파일을 생성하여 gen 폴더에 배치한다. • 다음 소스는 Icalc 인터페이스에 최소 공배수를 조사하는 메서드와 소수 여부를 조사하는 메서드의 원현을 선언하는 예이다.

  37. 3. 서비스 • 원격 인터페이스 (실습 예제)

More Related