Download presentation
1
안드로이드 세미나 김동민
2
30장. 서비스 구현
3
개요 안드로이드 서비스 액티비티와 연결돼있지 않아도 끊김 없이 실행해야 하는 기능을 구현하는데 사용된다 음악재생 프로그램
액티비티와 연결돼있지 않아도 끊김 없이 실행해야 하는 기능을 구현하는데 사용된다 음악재생 프로그램 Feed 서비스 RSS Atom 채팅 프로그램
4
개요 안드로이드 서비스의 시작 안드로이드 서비스의 주의사항 수동으로 시작하기 자동으로 시작하기
API를 호출 자동으로 시작하기 IPC(프로세스간의 통신)를 사용 안드로이드 서비스의 주의사항 서비스는 더 이상 필요 없을 때까지, 또는 메모리를 더 많이 확보해야 할 때까지 실행 된다 이로인해 CPU와 무선랜의 사용량이 많아져서 배터리의 사 용시간이 줄어들 수 있다
5
안드로이드 서비스 클래스의 구현은 액티비티의 구현과 비슷하다
서비스 클래스 구현 과정 안드로이드 SDK에서 제공하는 서비스용 기본 클래스 상속 새로운 서비스를 구현하는데 필요한 메소드를 오버라이드 AndroidManifest.xml 파일에 적절한 내용을 넣어 안드로이 드 시스템과 연동 안드로이드 서비스 클래스의 구현은 액티비티의 구현과 비슷하다
6
서비스 클래스 서비스 클래스의 세 가지 생명주기 onCreate() onStart() onDestroy()
서비스가 생성될 때 호출 onStart() 다른 프로세스에서 서비스를 수동으로 시작 할 경우 onDestroy() 서비스가 종료될 때 호출
7
서비스 클래스 WeatherPlusService 클래스의 onCreate() method
HttpClient 인스턴스 생성 표시할 텍스트 형식 세팅 LocationManager 인스턴스를 얻어옴 LocationProvider 를 사용 / 위치 변경시 변경사항을 업데이트 받는 리스너 등록
8
서비스 클래스 WeatherPlusService 클래스의 onDestroy() method
안드로이드 내부 종료 작업 처리 위치 변경 사항 업데이트를 더 이상 사용하지 않게 함
9
서비스 클래스 onBind() method onCreate() / onDestroy() 메소드 외에 구현해야 할 메소드
Ibinder 객체를 리턴 Ibinder 는 IPC 구조의 핵심에 위치한 클래스
10
프로세스 간 통신 IPC AIDL 액티비티나 안드로이드 내부의 다른 컴포넌트와 통신할 수 있게 해주는 방법
액티비티나 안드로이드 내부의 다른 컴포넌트와 통신할 수 있게 해주는 방법 서비스는 IPC를 통해 어떤 메소드를 호출할 수 있는지 선언 해당 메소드는 IPC를 통해 다른 컴포넌트가 직접 호출해서 사용 AIDL 개발자는 AIDL로 공개 인터페이스를 정의 안드로이드는 해당 AIDL로부터 지정된 인터페이스에 맞게 서버와 클라이언트 프로그램을 작성할 수 있는 도구를 제 공
11
AIDL AIDL 작성 IDL 프로그래밍 언어에 중립적인 형태로 작성 AIDL 자바 인터페이스와 비슷한 형태를 가짐
12
AIDL AIDL 작성 방법 자바 인터페이스와의 차이점 패키지 지정 메소드 정의 부분은 인터페이스 내부에 정의
데이터 타입 제한 기본 데이터 타입 int, float, double, boolean 등 String, CharSequence 클래스 List, Map(java.util 패키지) AIDL 로 정의된 타입 Parcelable 인터페이스를 구현한 모든 클래스, Parcelable은 안드로이드에서 사용하는 직렬화 방법 서비스 내에서의 예외 처리 서비스 내에서 발생하는 모든 예외는 try-catch 로 처리 오류상황에 대한 결과는 에러코드 등의 다른 방법으로 전달
13
AIDL AIDL 구현 과정 AIDL이 생성한 .stub 클래스의 인스턴스 생성
Service 를 상속받은 클래스의 onBind() 메소드에서 stub 클래스의 인 스턴스를 새로 생성해 리턴
14
AndroidManifest 정의 인터페이스에 구현된 서비스를 사용하기 위해서 AndroidManifest.xml 파일에 정의
Service 엘리멘트의 android:name 속성에 서비스 클래스 이름을 지정 마침표만 사용해서 기본패키지에 속하는 것을 표현
15
IPC 클라이언트 호출 IPC Intent 클라이언트가 서비스를 호출하는 단방향 통신만 지원
클라이언트를 호출하는 것이 가능은 하지만, 해당 액티비티가 실 행중인지 확신할 수 없기때문에 정상적으로 동작하지 않을 가능 성이 존재함 AIDL 을 적절하게 활용하면 서비스가 액티비티의 특정 기 능을 호출하게 할 수도 있다 Intent 서비스에서 Intent 를 던져주면 특정 액티비티가 Intent 를 받아 처리할 수 있게된다 특정 액티비티가 현재 실행중이여야 가능함
16
IPC 클라이언트 호출 HTTP 요청을 전송하여 결과를 받아옴 Forecast 객체로 변환
Forecast 객체 데이터를 사용하여 HTML 페이지 생성 SendBroadcast() 메소드를 통해 미리 정의된 인텐트 인스턴스를 관심있는 모든 모든 컴포넌트에게 전달하게 된다
17
Q & A
18
31장. 서비스 호출
19
서비스 호출 적당한 시간 이상 실행되는 액티비티나 컨텐트 프로바이더, 컴포넌트 는 얼마든지 서비스를 호출해서 사용이 가능하다
인텐트만을 수신하는 리시버의 경우 인텐트 하나를 처리한 이후 종료 되기 때문에 서비스를 호출할 수 없다 서비스 기능을 호출하기 위한 방법 해당 서비스에 대한 AIDL 확보 AIDL 에 포함된 특정 메소드를 호출 기능을 모두 사용한 이후 확보했던 인터페이스를 해제
20
바인딩 서비스를 사용하기 위한 준비 작업 서비스를 사용하려면 먼저 ServiceConnection 클래스 를 상속받아 새로운 클래스를 구현해야 한다 ServiceConnection 클래스 란? 특정 서비스를 대상으로 IPC 호출을 처리하는 서비스와의 연결을 의미함
21
바인딩 onServiceConnection()
onServiceConnected() 메소드 액티비티가 원하는 서비스와 연결될 때 호출 onServiceDisconnected() 메소드 서비스와의 연결이 정상적으로 종료됐을 때 호출 onServiceConnection() 연결하려는 서비스를 가리키는 ComponentName 과 IPC를 호출하기 위한 IBinder 인스턴스를 넘겨받음 IBinder 인스턴스를 AIDL에 정의된 인터페이스 클래스로 형변환 하 면 일반적인 자바 메소드를 호출하는 것처럼 서비스의 원하는 메소 드를 호출하는 IPC 를 실행할 수 있다
22
바인딩 bindService() method 액티비티를 특정 서비스에 연결하기위한 액티비티 메소드
호출하려는 서비스를 가리키는 Intent 직접 작성한 서비스를 호출하는 경우 해당하는 클래스 이름을 직접 지정한 인텐트를 사용할 수 있다 new Intent (this, WeatherPlusService.class) ServiceConnection 인스턴스 옵션 설정 플래그 대부분의 경우 BIND_AUTO_CREATE 값을 넘겨줌 BIND_AUTO_CREATE 의 경우 해당 서비스가 실행중이지 않을 경우 서비스를 자동으로 시작시 킴
23
서비스 호출 인터페이스 객체를 통해 서비스 기능을 호출하는 단계 서비스 기능을 호출할 경우 처리해야 할 두가지 예외
DeadObjectException 발생하면 서비스 연결이 비정상적으로 종료되었음을 의미함 연결이 끊겼을 때의 절차를 수행해야 함 필요한 경우 onServiceDisconnectied() 메소드를 수동으로 호출해야 함 RemoteException 프로세스간의 연결 과정에 문제가 있음을 나타내는 범용예외 상황 발생한 경우 서비스와의 연결을 새로 초기화 하는것이 좋다
24
서비스 연결 해제 서비스 기능을 종료하는 단계 예제
IPC 호출을 모두 사용한 이후 ServiceConnection 인스턴스를 인자값 으로 넘기면서 unbindService() 를 호출 이후 onServiceDisconnected() 메소드가 호출 서비스 인터페이스가 담겨있던 변수에 null 값을 설정하여 더 이상 인터페이스를 사용하지 못하게 된다 이후 서비스와 관련한 위젯이 있다면 모두 비활성화하고 프로그램 내부에서 서비스와 연결이 끊겼다는 사실을 인지하게 해야한다 예제 onServiceDisconnected() 가 호출될 경우 서비스 객체를 null 값으로 처리한다
25
수동 실행 수동으로 서비스 실행 하기 startService() 메소드 stopService() 메소드
IPC를 사용하지 않고 수동으로 서비스의 실행/종료 가 가능 액티비티 실행 여부와 관계없이 해당 서비스를 계속 실행시킬 수 있다 startService() 메소드 수동으로 서비스를 실행하기 위한 메소드로 두개의 인자를 사용 실행할 서비스를 가리키는 Intent 인스턴스 필요한 설정 사항을 담은 Bundle 인스턴스 이후 서비스의 onStart() 메소드에 직접 전달된다 stopService() 메소드 서비스를 종료하기 위한 메소드 startService() 에서 사용된 서비스를 가리키는 Intent만 지정하면 된다
26
데이터 수신 onResum() / onPause() 메소드
서비스에서 지정한 액션에 해당하는 인텐트 필터를 사용하여 특정 인텐트를 받음 그리고 static 으로 정의된 BroadcastReceiver 인스턴스로 인텐트를 처리하도록 리시버를 등록 등록했던 BroadcastReceiver를 등록 해제해 일시정지 상태에서 해당 인텐트를 더 이상 받지 않도록 설정한다
27
데이터 수신 BroadcastReceiver 전달받은 일기예보 정보를 사용자 인터페이스에 업데이트
28
데이터 수신 updateForecast() 인터페이스 stub을 사용하여 서비스 메소드를 호출해 최신 날씨 정보를 가져온다
날씨 정보가 준비되지 않은 경우 처리하게 될 부분
29
WeatherPlus 서비스 클라이언트 예제
30
Q & A
31
32장. 사용자 알림
32
사용자 알림 사용자 알림이 필요한 경우 사용자 알림 사용 예 전화/SMS/E-mail 수신 배터리가 부족한 경우 알람 시계
팝업 메시지 트레이 아이콘 풍선 도움말
33
알람 메시지 NotificationManager 클래스 안드로이드에서 알림 메시지를 사용하는 기본적인 방법
시스템 서비스의 하나로서 액티비티에서 getSystemService 메소드를 호출해 인스턴스를 확보하여 사용가능 하다 NotificationManager 클래스에서 제공하는 메소드 notify() 알림 메시지를 전달 Notification 객체를 넘겨받아 사용하는데, 이 객체는 알림 메시지를 표 시하는데 필요한 각종 정보가 담겨있다 cancel() / cancelAll() 알림 메시지를 중단
34
알람 메시지 Notification 클래스에 정의된 설정 값 기기 알림 메시지
사용자가 휴대폰에서 발생한 알림을 인식하게 하는데 필요하다 Lights 해당 변수에 true 값을 설정하면 휴대폰의 LED 불빛을 깜박일 수 있다 Notification.DEFAULT_LIGHTS (안드로이드 버전 1.5 이상) 소리 설정 ContentManager 에 등록된 소리파일을 가리키는 Uri를 Notification에 설정하면 해당 파일 소리를 재생할 수 있다 휴대폰 진동 long 배열에 밀리세컨드 단위로 간격을 지정한 진동 패턴을 vibrate 변 수에 설정
35
알림 메시지 아이콘 휴대폰에서 발생한 알림이 어떤 것인지 확인하는데 필요하다
확인 이후 다음단계로 진행하는 것을 도와주는 것이 아이콘이다 사용자가 아이콘을 클릭했을 때 전달할 PendingIntent 인스턴스를 지정 setLatestEventInfo() 메소드를 사용하여 아이콘과 인텐트, 보조 문자열을 한꺼번에 지정할 수 있다
36
예제 Notification/notify1 예제 프로젝트 실행
37
Q & A
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.