'Content providers'에 해당되는 글 2건

  1. 2013.10.04 Content Providers
  2. 2013.09.28 Android Application Components
Programming/Android2013. 10. 4. 02:17

Android Development - Content Providers 0/4

참조: http://developer.android.com/guide/topics/providers/content-providers.html


컨텐트 프로바이더는 정형화된 데이터의 셋의 접속을 관리한다. 보안을 위해 데이터를 캡슐화하여 제공한다. 콘텐트 프로바이더는 하나의 프로세스에서 동작하고 있는 다른 프로세스와 연결하는 표준 인터페이스이다.


컨텐트 프로바이더를 통해 데이터에 접속할 때, ContentResolver 객체를 이용하며 액의 Content 객체가 프로바이더의 클라이언트로써 포함된다. ContentResolver는 프로바이더 객체인 ContentProvider 추상클래스의 구현 객체와 통신한다. 프로바이더 객체는 데이터 요구를 클라이언트에게 받고 요구의 응답하고 결과를 리턴한다.


다른 앱들과 데이터를 공유할 필요가 없다면 자신의 프로바이더를 개발할 필요가 없다. 그러나 앱안에서 자신의 프로바이더가 앱 제안 검색을 제공할때 이것이 필요하고 복잡한 데이터나 파일의 복사 붙여넣기를 자신의 앱에서 다른 앱으로 전달할 때 필요로 한다.


안드로이드는 오디오, 비디오, 이미지 그리고 개인 연락처 등의 정보를 관리하는데 용도로도 컨텐트 프로바이더를 이용한다. 


좀더 정확하게 앞으로 4개의 파트로 나누어 설명하겠다.

1. Content Provider Basics

어떻게 테이블로 정의된 데이터에 컨텐트 프로바이더를 통해 접속할 것인가.

2, Creating a Content Provider

자신의 컴텐트 프로바이더를 어떻게 생성하는가.

3. Calendar Provider

안드로이드 플렛폼의 한 부분인 켈린더 프로바이더에 어떻게 접속하는가.

4. Contacts Provider

안드로이드 플렛폼의 한 부분인 컨텍트 프로바이더에 어떻게 접속하는가.

Posted by Brian B. Lee
Programming/Android2013. 9. 28. 21:14

Android Development - Application Fundamentals (1/2)


애플리케이션 컨포넌트 (Application Components)

참조: http://developer.android.com/guide/components/fundamentals.html


오늘은 자바의 기본 컨포넌트들을 정리하겠다. (본 내용은 위의 안드로이드 개발자 싸이트에 내용을 요약한 것이다.)


안드로이드의 기본 구성으로 네가지 어플리케이션 컨포넌트 타입이 있다. 각 타입은 명확히 다른 목적을 가지며 라이프사이클(생성->소멸)을 가진다.


1. Activities: 하나의 액티비티는 사용자 인터페이스에서 하나의 화면을 나타낸다.

예를들어 Email 앱의 경우 아마도 새로운 메일 리스트를 보인다거나 메일 작성화면 메일을 읽는 화면등이 각각의 액티비티가 될 수 있다. 하지만 이런 각각의 앱티비티가 하나의 앱을 이루지만 각각은 독립적이다. 이렇게 어떤 앱이 다른 앱의  액티비티를 실행시킬수 도 있다.(다른 앱이 이를 허용하는 경우). 이 예는 카메라 앱에서 Email 앱으로 데이터를 정송하는 경우등을 들 수 있다.

액티비티는 Activity 크래스로부터 상속된 하위 클래스이다.

참조: http://developer.android.com/guide/components/activities.html


2. Services: 서비스는 백그라운드에서 동작하며 독작을 운영하거나 프로세스를 삭제하는 작업을 한다.

이 서비스는 사용자 인터페이스에 보이지 않는다. 예를 들어 사용자가 다른 앱으로 작업하는 동안 백그라운드에서 음악을 실행시킨다거나 사용자 화면 없이 네트웩을 통해 데이터를 주고 받을 수 있다. 다른 컨포넌트를 통해(액티비티 같은) 서비스를 실행시키거나 멈추는 서비스와의 상호작용을 할 수 있다.

서비스는 Service 추상 크래스로부터 상속된 하위 클래스이다.

참조: http://developer.android.com/guide/components/services.html


3. Content providers: 콘텐트 프로바이더는 애플리케이션 데이터를 공유한다.

아마 너는 파일 시스템을 통해 데이터를 SQLite  데이터 베이스라던지, 웹, 그 밖에 너가 접속할 수 있는 데이터 스토리지에 저장할 수 있을 것이다. 콜텐드 프로바이더를 통해 다른 앱들이 이런 데이터에 쿼리하거나 수정할 수 있다.(물론 콘텐트 프로바이더가 이를 허락하는 경우) 하나의 예로 컨턴트 프로바이더는 사용자의 연락처 정보를 제공할 수 있다. 이렇게 적당한 허용하에 어떠한 앱도 각 개인의 관한 정보를 읽거나 쓰는 쿼리를 컨턴트 프로바이더를 사용함으로써 이용할 수 있다.

컨텐트 프로바이더는 또한 공유되지 않는 개인 자원의 읽기 쓰기에 도 용이하다.

컴텐트 프로바이더는 ContentProvider 추상 클래스로부터 상속된 하위 클래스이다.

참조: http://developer.android.com/guide/topics/providers/content-providers.html


4. Broadcast receivers: 브로드케스트 리씨버는 시스템 전반의 브로드케스트 알림을 알린다.

많은 브로드케스트는 메인 시스템으로부터 시작된다. 예를들어 브로드케스트 알람은 화면 꺼짐, 베터리 낮음, 화면 쳅처같은 것이 될 수 있다. 앱 또한 브로디케스팅을 할 수 있는데 예를 들어 어떤 데이터가 다운로드되어 다른 앱들이 이를 사용할 수 있을때 이를 이용한다.

브로드케스트 리시버는 BroadcastReceiver 추상 클래스로부터 상속된 하위 클래스이며 각각의 브로드케스트는 Intent 객체로 전달 된다.


컨포넌트의 실행 (Activating Components)

컨포넌트 중 세가지(Activates, Services, Broadcast Receivers)의 경우 비동기적으로 Intent 객체에 의해 동작된다. Intent 객체는 실행 중 서로 다른 컨포넌트들을 묶는 역할을 한다.(쉽게 메신저 역할로 다른 컨포넌트들에게 요청할 수 있다.)


Intent 클래스의 객체는 특정 컨포넌트나 특정 타입의 컨포넌트를 실행시킬 메시지를 정의할 수 있다.


1. 액티비티와 서비스를 위해 화면을 보이거나 무언가를 전달하는 행동을 정의할 수 있다. 예를들어 intent가 웹페이지를 오픈하거나 이미지를 보이는 질의를 전달할 수 있다. 이경우 받은 액티비티가 이를 실행하고 또 결과로 intent를 반환할 수 있다. (예를들어 당신이 개인 연락처를 받고자할 때, 선택된 연락처의 URI정보를 intent를 통해 반환 받을 수 있다.)

Activity: startActivity(), startActivityForResult() 메서드에 intent 인자를 넘김으로 실행(새로운 할것리를 전달)

Service: startService(), bindService() 메서드에 intent 인자를 넘김으로 실행(새로운명령을 실행시키거나 계속 진행)

2. 브로트케스트 리씨버의 경우 intent가 브로드케스트 알림 정보를 정의 할 수 있다.

Broadcast Receiver:  Intent 클래스의 메소드 sendBroadcast(), sendOrderedBroadcast(), sendStickyBroadcast().


3. 마지막으로 컨텐트 프로바이더는 intent에 의해 실행되지 않는다. 이는 ContentResolver(추상클래스)로 부터 요청받았을 때 실행되어 진다. 컨텐트 리졸버는 모든 컨텐트 프로바이터의 트렌젝션을 핸들링한다.  제공자와 트렌젝션하는 컨텐트는 이를 필요로하지 않고 대신에 ContentResolver 객체의 메서드르 호출한다. 이것이 컨텐트 프로바이터와 컨텐트 요구 정보를 추상화하는 개층이 된다.(보안을 위한)

Content Providers: ContentResolver 클래스의 query() 사용.


다음 번에는 Manifest File에 대하여 알아보겠다.

Posted by Brian B. Lee