23
4. 인인인인 인인인

4. 인텐트와 서비스

  • Upload
    xia

  • View
    52

  • Download
    0

Embed Size (px)

DESCRIPTION

4. 인텐트와 서비스. 인텐트 (Intent). Intent : ‘ 의도 ’ ( 사전적 의미 ) - 실행시킬 대상에 대한 정보를 담은 오브젝트 - 컴포넌트 , 클래스와 같은 명확한 대상을 지정하거나 데이터의 유형과 이를 가지고 수행할 행동 (action) 을 지정. 컴포넌트 ( 액티비티 , 서비스 , 브로드캐스트 리시버 등 ) 의 전환을 위해 인텐트 사용. RestaurantFinder 의 인텐트 - 전화걸기 - 맵을 이용한 길 안내 - 리뷰 페이지 방문. 인텐트 클래스 활용. - PowerPoint PPT Presentation

Citation preview

Page 1: 4.  인텐트와  서비스

4. 인텐트와 서비스

Page 2: 4.  인텐트와  서비스

Unlocking Android

인텐트 (Intent)

2

Intent : ‘ 의도’ ( 사전적 의미 )- 실행시킬 대상에 대한 정보를 담은 오브젝트- 컴포넌트 , 클래스와 같은 명확한 대상을 지정하거나 데이터의 유형과 이를 가지고 수행할 행동 (action) 을 지정

컴포넌트 ( 액티비티 , 서비스 , 브로드캐스트 리시버 등 ) 의 전환을 위해 인텐트 사용

RestaurantFinder 의 인텐트- 전화걸기- 맵을 이용한 길 안내- 리뷰 페이지 방문

Page 3: 4.  인텐트와  서비스

Unlocking Android

인텐트 클래스 활용

3

인텐트 클래스들은 안드로이드에서 애플리케이션들간의 의사전달을 위한 네트워크의 역할 수행

특정 시간에 작업이 수행되도록 하기 위해 필요한 것이 무엇인지 애플리케이션이 본질적으로 제공하려는 기능이 무엇인지 고려

인텐트 클래스는 지연 바인딩 (late binding) 을 통해 작업에 대한 컴포넌트와 연결

디커플링 (decoupling) 을 통해 상위 애플리케이션이나 시스템의 변경 없이도 수정과 업데이트를 쉽게 처리

Page 4: 4.  인텐트와  서비스

Unlocking Android

인텐트의 정의

4

인텐트는 액션 , 데이터 , 카테고리 등의 속성을 조합하여 표현

인텐트 엘리먼트- Extras : 추가 데이터를 번들 (bundle) 형태로 인텐트에 전달- Component : 인텐트 , 옵션 , 타입 , 카테고리를 사용하기 위한 명시적 패키지와 클래스 지정- Type : 명시적인 MIME 타입 지정- Category : 인텐트에 대한 추가 메타 데이터- Data : URI 형태로 표현되는 작업을 위한 데이터- Action : 액션을 가리키는 공인된 문자열

Page 5: 4.  인텐트와  서비스

Unlocking Android

인텐트 호출 ( 예제 4.1)

5

intent = new Intent(Intent.ACTION_VIEW, Uri.parse(this.link));startActivity(intent); // Uri 를 분석하여 action _view 호출intent = new Intent(Intent.ACTION_VIEW, Uri.parse(“geo:0,0?q= “+this.location.getText().toString())); // 좌표데이터 이용startActivity(intent);intent = new Intent(Intent.ACTION_CALL, Uri.parse(“tel:” +phoneString)); // 전화번호로 전화를 걸 수 있는startActivity(intent);

Page 6: 4.  인텐트와  서비스

Unlocking Android

인텐트 레졸루션 (Intent resolution)

6

암시적 인텐트의 URI 를 분석하여 late binding 처리

액티비티 , 브로드캐스트 리시버 , 서비스는 인텐트 핸들러로 등록 가능- <intent filter> 앨리먼트로 특정 인텐트를 지정하여 Androidmanifest.xml 파일에 등록 가능

인텐트와 인텐트 필터의 대응- 액션 (action) 과 데이터 (data) 는 대응관계를 가짐- 특수한 경우 데이터 타입이 대응되거나 , 스키마 , 권한 , 경로의 조합이 대응

Page 7: 4.  인텐트와  서비스

Unlocking Android

액션과 카테고리

7

액션과 카테고리는 문자열로 표현

인텐트필터에서 액션이 명시되지 않았다면 인텐트를 통해 불려지는 어떠한 액션과도 대응 가능

인텐트필터는 인텐트가 대응시켜야 하는 것 이상의 추가적인 카테고리를 가질 수 있지만 반드시 인텐트가 명기해야 하는 최소한의 것은 유지

카테고리를 갖지 않는 인텐트 필터는 카테고리가 없는 인텐트만 대응 가능

데이터는 필수 요소가 아님 – 카테고리와 액션만으로 대부분 동작

Page 8: 4.  인텐트와  서비스

Unlocking Android

데이터 (1/2)

8

액션과 카테고리가 결정된 다음 데이터 사용

데이터 유형 – URI- MIME 형식

ex> content://com.google.provider.NotePad/notes- 스키마 (scheme), 권한 (authority), 경로 (path) 의 조합

ex> Weather://com.msi.manning/loc?zip=12345

Page 9: 4.  인텐트와  서비스

Unlocking Android

데이터 (2/2)

9

스키마 , 권한 , 경로

- 스키마가 존재하고 타입이 존재하지 않으면 , 인텐트는 어떤

타입과도 대응

- 타입이 존재하고 스키마가 존재하지 않으면 , 인텐트는 어떤

스키마와도 대응

- 스키마와 타입이 모두 존재하지 않는다면 , 인텐트는 스키마나

타입 중 어떤 것과도 대응되지 않음

- 권한이 지정되었다면 , 스키마 또한 반드시 지정

- 경로가 지정되었다면 , 스키마와 권한 또한 반드시 지정

Page 10: 4.  인텐트와  서비스

Unlocking Android

안드로이드 제공 액티비티

10

액션 URI 설명

Intent.ACTION_VIEW geo:latitude,longitude 지정된 경로와 위도를 기반으로 지도 프로그램을 실행

Intent.ACTION_VIEW geo:0.0?q=street+address

특정 주소를 기반으로 지도 프로그램을 실행

Intent.ACTION_CALL tel:phone_numbe 전화 프로그램을 실행하여 해당 번호로 전화

Intent.ACTION_DIAL tel:phone_number전화 프로그램을 실행하여 해당 번호를 누름 ( 전화를 걸지는 않음 )

Intent.ACTION_DIAL voicemail:전화 프로그램을 실행하고 해당 보이스메일 번호를 누름 ( 전화를 걸지는 않음 )

Intent.ACTION_VIEW http://web_address 해당 URL 로 웹 브라우저를 실행

Intent.ACTION_VIEW https://web_address 해당 URL 로 웹 브라우저를 실행( 이 때 보안 프로토콜을 사용 )

Intent.ACTION_WEB_SEARCH plain_text 구글 검색 페이지를 연다

Page 11: 4.  인텐트와  서비스

Unlocking Android

브로드캐스트 리시버 (1/3)

11

인텐트의 용도

- 이벤트의 수식을 원하는 리시버에게 브로드캐스팅

- ‘WeatherReporter’ 에서 사용자가 설정한 지역에 악천후 등의

기상정보가 있을 때 이와 관련된 경고 내용을 디스플레이

- 기상정보를 체크하고 경고 메시지를 보내줄 수 있는 백그라운드

프로세스 필요

Page 12: 4.  인텐트와  서비스

Unlocking Android

브로드캐스트 리시버 (2/3)

12

브로드캐스트 메서드

메서드 내 용

sendBroadcast(Intent intent) 인텐트를 브로드캐스팅하기 위한 기본 형식

sendBroadcast(Intent intent, String receiverrPermission)

브로드캐스트 수신을 위해 리시버들이 반드시 선언해야 하는 퍼미션 문자열과 같이 인텐트를 브로드캐스팅 함

sendStickyBroadcast(Intent intent)

브로드캐스팅된 뒤 일정기간동안 수신자들이 데이터를 검색할 수 있게 함 . 이 기능을 사용하려면 반드시 BROADCAST_STICKY 퍼미션을 사용하여 선언해야 함

sendOrderedBroadcast(Intent intent, String receiverPer-mission)

인텐트를 브로드캐스팅하여 리시버들을 차례대로 호출함

sendOrderedBroadcast(Intent intent, String receiverper-mission, BroadcastReceiver resulttReceiver, Broadcas-tReceiver resulttReceiver, Handler scheduler, int initial-Code, String initialData, Bun-dle initialExtras)

인텐트를 브로드캐스팅한 후 크로드캐스트 리시버에서 리턴 값을 얻을 수 있음 . 모든 리시버들은 브로드캐스트 리시버 리턴 시에 데이터를 추가하여 보낼 수 있음 . 이 메소드를 사용할 때 리시버들은 순서대로 호출됨

Page 13: 4.  인텐트와  서비스

Unlocking Android

브로드캐스트 리시버 (3/3)

13

브로드캐스트 액션

액 션 설 명

ACTION_TIME_TICK 매 분마다 현재 시간을 전송

ACTION_TIME_CHANGED 사용하는 기기의 시간이 변경되었을 때

ACTION_TIMEZONE_CHANGED 사용하는 기기의 타임존이 변경되었을 때

ACTION_BOOT_COMPLETED 플랫폼이 부팅을 완료했을 때

ACTION_PACKAGE_ADDED 플랫폼에 새로운 패키지가 추가되었을 때

ACTION_PACKAGE_REMOVED 플랫폼에 패키지가 삭제되었을 때

ACTION_BATTERY_CHANGED 사용중인 장비의 배터리 레벨이나 상태변화가 생겼을 때

Page 14: 4.  인텐트와  서비스

Unlocking Android

서비스 (Service)

14

장시간 동안 background 에서 수행이 필요한 프로세스를

위해 제공

WeatherAlertService- 사용자의 현재 위치 또는 사용자가 설정한 지역에서 악천후

등의 기상 정보를 제공하기 위한 서비스

- Notification 을 통해 수행 중인 애플리케이션에 관계 없이

화면에 알림 기능 제공

Page 15: 4.  인텐트와  서비스

Unlocking Android

서비스의 목적

15

백그라운드 작업

- 사용자 인터페이스를 갖지 않는 프로세스

- 음악 파일의 재생 또는 파일의 다운로드와 같은 시간 지속적인

작업의 처리

IPC(Inter – Process Communication)- 원격접속이 가능한 오브젝트를 생성하고 서비스를 통해 요청된

사항 처리

- 프로세스간 협업을 위해 사용

Page 16: 4.  인텐트와  서비스

Unlocking Android

서비스의 실행

16

서비스는 startService() 또는 bindService() 를 통해

실행되며 , 일단 개시되면 완전히 중단될 때까지 실행을 지속

startService()- 단발성 서비스의 실행

- 콜백 (callback) 을 갖지 않음

bindService()- 지속적 서비스의 실행

- 서비스와 지속적인 상호 작용이 요구되는 경우 사용

Page 17: 4.  인텐트와  서비스

Unlocking Android

IPC 실행

17

서로 다른 프로세스에 포함된 컴포넌트 간의 통신은 IPC 를

통해 가능

AIDL: Android Interface Description Language- AIDL 문법을 사용하여 인터페이스를 기술할 수 있으며 이는

AIDL 틀의 입력 파일로 사용됨

- AIDL 은 자바 인터페이스와 내부 스텁 (stub) 클래스를 순서대로

생성할 수 있도록 하여 원격 접속 가능한 오브젝트를 만드는데

사용

Page 18: 4.  인텐트와  서비스

Unlocking Android

AIDL 에서 사용 가능한 타입

18

Type 설 명 Import 필요 여부

Java primitives boolean, byte, short, int, float, double, long, char No

String Java.lang.String No

CharSequence Java.lang.CharSequence No

List 반드시 AIDL 에서 허용한 타입들만 사용 .결국 ArrayList 로 구현 No

Map 반드시 AIDL 에서 허용한 타입들만 사용 .HashMap 형태로 구현 No

Other AIDL in-terfaces

기타 AIDL 인터페이스 타입으로 만들어진모든 것 Yes

Parcelable ob-ject

안드로이드 Parcelable 인터페잇를 구현한 오브젝트들 Yes

Page 19: 4.  인텐트와  서비스

Unlocking Android

스텁과 프록시

19

stub- binder 를 확장하고 다른 외부 클래스 인터페이스 확장

- 원격접속 가능한 오브젝트의 local 부분

- 인터페이스 타입의 원격 정보를 리턴해주는

asInterface(Ibinder binder) 포함 , 호출자는 이 메서드를

통해 원격 오브젝트의 핸들러를 갖거나 원격 메서드 호출 가능

proxy: asInterface 메서드의 호출에 대응하는 클래스

Page 20: 4.  인텐트와  서비스

Unlocking Android

퍼블리싱 (publishing)

20

원격 인터페이스의 노출

퍼블리싱을 위해서는 Service 를 상속받고 onBind() 메서드를 통해 IBinder 를 리턴하는 클래스 생성

Stub 클래스는 원격접속이 가능한 인터페이스를 확장하여

구현된 내용을 리턴

원격 인터페이스의 노출을 통해 다른 프로세스에서 서비스에

대한 바인딩을 가능하게 함

Page 21: 4.  인텐트와  서비스

Unlocking Android

서비스 바인딩

21

액티비티에 의해 bindService 가 호출되면

ServiceConnection 오브젝트는 여러 콜백들을

서비스로부터 액티비티에 반환콜백은 onServiceConnected(ComponentName ClassName, IBinder binder) 메서드 형태로 발생

플랫폼에서는 IBinder 타입의 onBind 결과를

onServiceConnected 메서드로 넘겨서 호출자로 하여금

사용을 가능하게 함

Page 22: 4.  인텐트와  서비스

Unlocking Android

서비스 바인딩 절차

22

[INTERFACE_NAME].aidl 의 형태로 인터페이스 정의

.aidl 파일에 필요한 자바 인터페이스 생성 ( 이클립스에서는

자동으로 생성됨 )

생성된 [INTERFACE_NAME}.stub 클래스를 확장하여

인터페이스 메서드 구현

onBind() 메서드를 사용하여 클라이언트에 인터페이스 노출

ServiceConnection 으로 서비스를 바인딩하여 원격접속

가능한 오브젝트의 핸들을 얻고 사용

Page 23: 4.  인텐트와  서비스

Unlocking Android

binder 와 parcelable

23

IPC 를 가능하게 하는 IBinder 와 Binder 의 핵심은 IBinder.transact 와 Binder.onTransact 메서드

AIDL 을 사용하여 정의한 메서드는 트랜잭션 처리를 통해 동기적으로 처리

AIDL 로 정의한 인터페이스 메서드들을 통해서 보내고 받는 모든 오브젝트들은 트랜잭트 (transact) 사용

전달되는 오브젝트들은 바인더 트랜잭트 메서드에서 로컬 / 원격 프로세스의 경계를 넘어 데이터를 보내기 위해 반드시 파서러블 형태로 처리되어야 함

AIDL 이 지원하는 타입 이외의 데이터 처리를 위해서는 파서러블 구현이 요구됨