slide1 n.
Skip this Video
Loading SlideShow in 5 Seconds..
4. 인텐트와 서비스 PowerPoint Presentation
Download Presentation
4. 인텐트와 서비스

Loading in 2 Seconds...

  share
play fullscreen
1 / 23
Download Presentation

4. 인텐트와 서비스 - PowerPoint PPT Presentation

xia
183 Views
Download Presentation

4. 인텐트와 서비스

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. 4. 인텐트와 서비스

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

  3. 인텐트클래스 활용 인텐트 클래스들은 안드로이드에서 애플리케이션들간의 의사전달을 위한 네트워크의 역할 수행 특정 시간에 작업이 수행되도록 하기 위해 필요한 것이 무엇인지 애플리케이션이 본질적으로 제공하려는 기능이 무엇인지 고려 인텐트 클래스는 지연 바인딩(late binding)을통해 작업에 대한 컴포넌트와 연결 디커플링(decoupling)을통해 상위 애플리케이션이나 시스템의 변경 없이도 수정과 업데이트를 쉽게 처리 Unlocking Android

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

  5. 인텐트 호출 (예제 4.1) 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); Unlocking Android

  6. 인텐트레졸루션(Intent resolution) 암시적 인텐트의URI를 분석하여 late binding 처리 액티비티, 브로드캐스트 리시버, 서비스는 인텐트핸들러로 등록 가능 - <intent filter> 앨리먼트로 특정 인텐트를 지정하여 Androidmanifest.xml 파일에 등록 가능 인텐트와인텐트 필터의 대응 - 액션(action)과 데이터(data)는 대응관계를 가짐 - 특수한 경우 데이터 타입이 대응되거나, 스키마, 권한, 경로의 조합이 대응 Unlocking Android

  7. 액션과 카테고리 액션과 카테고리는 문자열로 표현 인텐트필터에서 액션이 명시되지 않았다면 인텐트를 통해 불려지는 어떠한 액션과도 대응 가능 인텐트필터는인텐트가 대응시켜야 하는 것 이상의 추가적인 카테고리를 가질 수 있지만 반드시 인텐트가 명기해야 하는 최소한의 것은 유지 카테고리를 갖지 않는 인텐트 필터는 카테고리가 없는 인텐트만 대응 가능 데이터는 필수 요소가 아님 – 카테고리와 액션만으로 대부분 동작 Unlocking Android

  8. 데이터 (1/2) 액션과 카테고리가 결정된 다음 데이터 사용 데이터 유형 – URI - MIME 형식 ex> content://com.google.provider.NotePad/notes - 스키마(scheme), 권한(authority), 경로(path)의 조합 ex> Weather://com.msi.manning/loc?zip=12345 Unlocking Android

  9. 데이터 (2/2) 스키마, 권한, 경로 - 스키마가 존재하고 타입이 존재하지 않으면,인텐트는 어떤 타입과도 대응 - 타입이 존재하고 스키마가 존재하지 않으면,인텐트는 어떤 스키마와도 대응 - 스키마와 타입이 모두 존재하지 않는다면,인텐트는 스키마나 타입 중 어떤 것과도 대응되지 않음 - 권한이 지정되었다면, 스키마 또한 반드시 지정 - 경로가 지정되었다면, 스키마와 권한 또한 반드시 지정 Unlocking Android

  10. 안드로이드 제공 액티비티 Unlocking Android

  11. 브로드캐스트 리시버 (1/3) 인텐트의 용도 - 이벤트의 수식을 원하는 리시버에게 브로드캐스팅 - ‘WeatherReporter’에서 사용자가 설정한 지역에 악천후 등의 기상정보가 있을 때 이와 관련된 경고 내용을 디스플레이 - 기상정보를 체크하고 경고 메시지를 보내줄 수 있는 백그라운드 프로세스 필요 Unlocking Android

  12. 브로드캐스트 리시버 (2/3) 브로드캐스트메서드 Unlocking Android

  13. 브로드캐스트 리시버 (3/3) 브로드캐스트 액션 Unlocking Android

  14. 서비스(Service) 장시간 동안 background에서 수행이 필요한 프로세스를 위해 제공 WeatherAlertService - 사용자의 현재 위치 또는 사용자가 설정한 지역에서 악천후 등의 기상 정보를 제공하기 위한 서비스 - Notification을 통해 수행 중인 애플리케이션에 관계 없이 화면에 알림 기능 제공 Unlocking Android

  15. 서비스의 목적 백그라운드 작업 - 사용자 인터페이스를 갖지 않는 프로세스 - 음악 파일의 재생 또는 파일의 다운로드와 같은 시간 지속적인 작업의 처리 IPC(Inter – Process Communication) - 원격접속이 가능한 오브젝트를 생성하고 서비스를 통해 요청된 사항 처리 - 프로세스간 협업을 위해 사용 Unlocking Android

  16. 서비스의 실행 서비스는 startService() 또는 bindService()를 통해 실행되며, 일단 개시되면 완전히 중단될 때까지 실행을 지속 startService() - 단발성 서비스의 실행 - 콜백(callback)을 갖지 않음 bindService() - 지속적 서비스의 실행 - 서비스와 지속적인 상호 작용이 요구되는 경우 사용 Unlocking Android

  17. IPC 실행 서로 다른 프로세스에 포함된 컴포넌트 간의 통신은 IPC를 통해 가능 AIDL: Android Interface Description Language - AIDL 문법을 사용하여 인터페이스를 기술할 수 있으며 이는 AIDL 틀의 입력 파일로 사용됨 - AIDL은 자바 인터페이스와 내부 스텁(stub) 클래스를 순서대로 생성할 수 있도록 하여 원격 접속 가능한 오브젝트를 만드는데 사용 Unlocking Android

  18. AIDL에서 사용 가능한 타입 Unlocking Android

  19. 스텁과프록시 stub - binder를 확장하고 다른 외부 클래스 인터페이스 확장 - 원격접속 가능한 오브젝트의 local 부분 - 인터페이스 타입의 원격 정보를 리턴해주는 asInterface(Ibinder binder) 포함, 호출자는 이 메서드를 통해 원격 오브젝트의 핸들러를 갖거나 원격 메서드 호출가능 proxy : asInterface메서드의 호출에 대응하는 클래스 Unlocking Android

  20. 퍼블리싱(publishing) 원격 인터페이스의 노출 퍼블리싱을 위해서는 Service를 상속받고 onBind() 메서드를 통해 IBinder를 리턴하는 클래스 생성 Stub 클래스는 원격접속이 가능한 인터페이스를 확장하여 구현된 내용을 리턴 원격 인터페이스의 노출을 통해 다른 프로세스에서 서비스에 대한 바인딩을 가능하게 함 Unlocking Android

  21. 서비스 바인딩 액티비티에 의해 bindService가 호출되면 ServiceConnection오브젝트는 여러 콜백들을 서비스로부터 액티비티에 반환 콜백은onServiceConnected(ComponentNameClassName, IBinder binder) 메서드 형태로 발생 플랫폼에서는 IBinder타입의 onBind결과를 onServiceConnected메서드로 넘겨서 호출자로 하여금 사용을 가능하게 함 Unlocking Android

  22. 서비스 바인딩 절차 [INTERFACE_NAME].aidl의 형태로 인터페이스 정의 .aidl파일에필요한 자바 인터페이스 생성(이클립스에서는 자동으로 생성됨) 생성된 [INTERFACE_NAME}.stub 클래스를 확장하여 인터페이스 메서드 구현 onBind() 메서드를 사용하여 클라이언트에 인터페이스 노출 ServiceConnection으로 서비스를 바인딩하여 원격접속 가능한 오브젝트의 핸들을 얻고 사용 Unlocking Android

  23. binder와 parcelable IPC를 가능하게 하는 IBinder와 Binder의 핵심은 IBinder.transact와 Binder.onTransact메서드 AIDL을 사용하여 정의한 메서드는 트랜잭션 처리를 통해 동기적으로 처리 AIDL로 정의한 인터페이스 메서드들을 통해서 보내고 받는 모든 오브젝트들은 트랜잭트(transact) 사용 전달되는 오브젝트들은 바인더 트랜잭트메서드에서 로컬/원격 프로세스의 경계를 넘어 데이터를 보내기 위해 반드시 파서러블 형태로 처리되어야 함 AIDL이 지원하는 타입 이외의 데이터 처리를 위해서는 파서러블 구현이 요구됨 Unlocking Android