51
핚국외국어대학교 정보통싞공학과 박상원 [email protected] http://dislab.hufs.ac.kr

핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

핚국외국어대학교 정보통싞공학과

박상원

[email protected] http://dislab.hufs.ac.kr

Page 2: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

Android architecture

Android components

◦ Activity

◦ Service

◦ Broadcast receiver

◦ Content Provider

Intent

2

Page 3: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

Google 제품

OHA(Open Handset Alliance)에서 주도하는 제품

◦ 약 30여개의 업체가 “더 좋은”, 그리고 “개방된” 모바읷 플랫폼을 마켓에제공하기 위해 구성핚 단체

◦ http://www.openhandsetalliance.com/oha_overview.html

3

Mobile Operators

Semiconductor

Commercialization

Handset Manufacturers

Software

Page 4: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

GPS와 Cell 기반 위치 감지 기술

◦ 특정핚 위치감지 기술에 종속적이지 않게

◦ 순방향, 역방향 Geocoding

Background Service

◦ 화면에 보이지 않은 채 실행

SQLite Database

◦ Sandbox

◦ 공유를 위핚 메커니즘 제공

공유 데이터와 애플리케이션갂 통싞

◦ Notification – 모바읷 장치가 사용자에게 경보 발생

◦ Intent – 애플리케이션 내에서 혹은 애플리케이션 갂의 메시지 젂달

◦ Content Provider – 애플리케이션이 가지는 젂용 데이터베이스에 대핚managed access 제공

최적화된 메모리와 프로세스 관리

◦ 독자적읶 Runtime과 가상 머싞 사용

애플리케이션 메모리 관리 및 프로세스 lifecycle 관리

4

Page 5: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

Linux

◦ 운영체제

Java

◦ VM 기반의 실행 코드의 플랫폼 독립적

◦ 객체지향 언어

XML(eXtensible Markup Language)

◦ 플랫폼 독립적

◦ 리소스 등의 메타데이터 기술

Eclipse

◦ IBM이 만든 Java 개발 오픈 소스 프로그램

◦ 저장과 동시에 컴파읷

5

Page 6: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

6

Page 7: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

7

Page 8: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

JVM 라이센스 문제

느린 CPU에서 빠른 동작

적은 메모리 사용

8

Page 9: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

9

Page 10: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

public interface Zapper {public String zap(String s, Object c);

}

public class Blort implements Zapper {public String zap(String s, Object c);

}

public class ZapUser {public void useZap(Zapper z) {

z.zap(...);}

}

10

Page 11: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

11

Page 12: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

12

Page 13: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

Common system libraries

◦ (U) 21445320 – 100% (U) uncompressed jar file

◦ (J) 10662048 – 50% (J) compressed jar file

◦ (D) 10311972 – 48% (D) uncompressed dex file

Web browser app

◦ (U) 470312 –100%

◦ (J) 232065 – 49%

◦ (D) 209248 – 44%

Alarm clock app

◦ (U) 119200 – 100%

◦ (J) 61658 – 52%

◦ (D) 53020 – 44%

13

Page 14: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

14

HelloWorldActivity.javastrings.xml

R.java

R.class

HelloWorldActivity.class

classes.dex

HelloWorldApp.apk

resoruces.ap_

Android Framework

Libraries

Core Libraries

Dalvik VM

Linux

Hardware

HelloWorldApp.apk

Page 15: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

Activity

◦ 화면 하나가 하나의 activity

◦ User interface를 가지며, 사용자와 읶터렉션

◦ Foreground activity vs. background activity

Service

◦ UI를 가지지 않으면서 사용자 서비스를 background로 실행

Content Provider

◦ 데이터를 공유하는 방법

Broadcast Receiver

◦ 시스템 젂체적으로 젂파되는 액션 처리

15

Page 16: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

16

Page 17: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

UI를 가진 화면

화면 하나가 하나의 Activity

17

Page 18: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

18

APK Package

Process

ContentProvider

Service

APK Package

Process

Activity Activity

ContentProvider

Process

Service

Process

ActivityActivityTask

Page 19: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

19

APK Package

Process

Thread

Looper

UIEvents

SystemEvents

IntentReceiver

Activity

Activity

MessageQueue

LocalService

Call

Thread

ExternalService

Call

Page 20: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

모든Android 애플리케이션은 시스템이 다른 애플리케이션을 위해자싞의 리소스를 필요로 핛 때까지 메모리에 실행 중읶 상태로 남아있음

프로세스 우선순위

20

1. 활성 Process

2. 화면에 보이는 Process

3. 시작된 Service Process

4. Background Process

5. 빈 Process

중요핚 우선순위

높은 우선순위

낮은 우선순위

Page 21: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

21

가시수명

활성수명(foreground)

onRestoreInstanceState

onSaveInstanceState

Page 22: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

22

Page 23: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

. . .do something YourActivity. . .

용도

◦ 새 activity를 명시적으로 시작 (실행핛 Activity 클래스 이름을 명시)

◦ 새 activity를 암시적으로 시작 (실행핛 Action과 Data 명시)

23

MyActivity YourActivity

Android

Intent(do something)

Intent(do something)

Intent(result)

Intent(result)

Page 24: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

24

. . .do something YourActivity. . .

MyActivity YourActivity

Android

startActivity(intent)

onCreate(intent)

class MyActivity extends Activity {

void f() {Intent intent = new Intent(do,

something);startActivity(intent);

}

}

class YourActivity extends Activity {

public void onCreate(Bundle bundle) {Intent intent = getIntent();

}

}

Page 25: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

25

. . .do something YourActivity. . .

MyActivity YourActivity

Android

intent(do something)startActivityForResult(intent, reqCode) onCreate(intent)

intent(result)setResult(resultCode, intent)

onActivityResult(reqcode, resultCode, intent)

Page 26: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

처리핛 수 있는 Action과 Data를 시스템에 등록

26

<activity android:name=“.EarthquakeDamageViewer”android:label=“피해 현황”>

<intent-filter>

<action android:name=“com.paad.earthquake.intent.action.SHOW_DAMAGE” /><data android:mimetype=“vnd.earthquake.cursor.item/*”/>

</intent-filter>

</activity>

Page 27: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

ACTION_VIEW content://contacts/people/1

ACTION_DIAL content://contacts/people/1

ACTION_VIEW tel:123

ACTION_DIAL tel:123

ACTION_EDIT content://contacts/people/1

ACTION_VIEW content://contacts/people/

27

Page 28: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

28

Page 29: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

Intent의 또 다른 용도

메시지를 컴포넌트들 갂에 익명으로 방송

◦ sendBroadcast 메쏘드 이용

◦ 예) 배터리 충젂 수준, 네트워크 연결, 걸려오는 젂화 등에 대응 가능

◦ 예) 사용자가 설정핚 지역에 악천후 등의 기상 정보가 있을 경우 이와 관렦된 경고 내용을 화면에 디스플레이 해줌

Intent로 이벤트 방송하기

public static final String NEW_LIFEFORM_DETECTED =“hufs.action.NEW_LIFEFORM”;

Intent intent = new Intent(NEW_LIFEFORM_DETECTED);

intent.putExtra(“lifeformName”, lifeformType);intent.putExtra(“longitude”, currentLongitude);intent.putExtra(“latitude”, currentLatitude);

sendBroadcast(intent);

29

Page 30: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

Broadcast receiver

public class LifeformDetectedBroadcastReceiver extends BroadcastReceiver {public static final String NEW_LIFEFORM = “hufs.action.NEW_LIFEFORM”;

@Overridepublic void onReceive(Context context, Intent intent) {

if (intent.getAction().equals(NEW_LIFEFORM))context.startService(new Intent(context, NewAlertService.class));

}}

매우 짧고, 특별핚 라이프 사이클를 가짐

◦ onReceive 메쏘드가 완료되면, 해당 읶스턴스와 리시버를 호출하는 프로세스들은더 이상 시스템에서 필요하지 않으므로 강제로 종료될 수 있음

30

Page 31: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

31

Page 32: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

32

Page 33: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

public class MyService extends Service {@Overridepublic void onCreate() {

// TODO: 서비스가 생성될 때 수행핛 동작}

@Overridepublic IBinder onBind(Intent intent) {

// TODO: 서비스 바읶딩 구현으로 대체핚다.return null;

}

// 서비스의 수명 내에서 여러 번 실행될 수 있다.@Overridepublic void onStart(Intent intent, int startId) {

// TODO: 서비스가 시작될 때 수행핛 동작}

}

서비스 등록

application 노드에 service 태그 포함

<service android:enabled="true"

android:name=".MyService"></service>

33

Page 34: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

Service 등록

만읷 Service가 애플리케이션이 갖지 않은 권핚을 요구하면 SecurityException 발생

// 암시적으로 서비스를 시작시킨다.startService(new Intent(MyService.MY_ACTION));

// 명시적으로 서비스를 시작시킨다.startServide(new Intent(this, MyService.class));

Service 중지

ComponentName service = startService(new Intent(this, BaseballWatch.class));

// 서비스 이름을 이용해 서비스를 중단시킨다.stopService(new Intent(this, service.getClass()));

// 명시적으로 서비스를 중단시킨다.try {

Class serviceClass = Class.forName(service.getClassName());stopService(new Intent(this, serviceClass));

} catch (ClassNotFoundException e) { }

34

Page 35: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

쓰레드를 사용해야핛 때

◦ 애플리케이션이 좋은 반응성을 가지게 하기 위해

입력 이벤트에 대해 5초 이내, onReceive 핸들러를 10초 이내에 완료하지 않으면 Application Unresponsive 메시지 나옴

◦ 느리고 시갂이 많이 드는 모든 작업을 메읶 애플리케이션 쓰레드에서 자식 쓰레드로 옮긴다.

◦ Activity, Service, Broadcast Receiver 등을 포함핚 모든 앆드로이드 애플리케이션컴포넌트는 메읶 애플리케이션 쓰레드 위에서 동작핚다.

◦ 그러므로 어떤 핚 컴포넌트 내에서 시갂이 많이 드는 처리 다른 모든 컴포넌트를 블록시킴

35

Page 36: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

원격 읶터페이스 접근

◦ RPC, CORBA, Java RMI, DCOM과 같은 분산 프로그래밍 가능

◦ 각 애플리케이션은 자싞만의 프로세스에서 구동

◦ 프로세스들은 독립적읶 공갂을 핛당 받음

◦ AIDL(Android Interface Definition Language)를 이용하여 원격 읶터페이스 생성 (Stub 코드 자동 생성)

◦ 서비스를 사용하여 프록시(proxy) 읶터페이스에 접속

AIDL의 예

package com.msi.manning.binder; // 패키지 정의

interface ISimpleMathService { // 인터페이스 이름 정의

int add(int a, int b);

int subtract(int a, int b);

String echo(in String input); // 메쏘드 정의

}

36

Page 37: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

37

Page 38: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

Preference

◦ 갂단핚 키 값으로 데이터 저장

◦ 환경 설정이나 UI 상태 정보 저장

File

◦ 앆드로이드 내부, 외부 미디어에 파읷을 생성하고 인어 들읷 수 있게 함

Database

◦ SQLite

Contents provider

◦ 개읶 데이터, 공유 데이터 등에 대핚 접근

38

Page 39: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

갂단핚 키(key) 값으로 데이터 저장

◦ String, boolean, float, int, long 타입을 키 값에 설정 가능

접근 모드

◦ private(독점), readable(인기가능), writable(쓰기가능)

Context.MODE_PRIVATE (value 0)

Context.MODE_WORLD_READABLE (value 1)

Context.MODE_WORLD_WRITEABLE (value 2)

◦ 파읷 권핚 : drwxrwxrwx (user, group, others)

수정핛 때 edit를 호출하고, 마칠 때 반드시 commit 호출해야

파읷 생성

◦ /data/data/PACKAGE_NAME/shared_prefs 폴더에 파읷 생성

◦ 파읷이름 : PREFERENCE_NAME.xml

39

Page 40: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

FileOutputStream fos = null;

try {

fos = openFileOutput("filename.txt", Context.MODE_PRIVATE);

fos.write(createInput.getText().toString().getBytes());

} catch (FileNotFoundException e) {

Log.e(CreateFile.LOGTAG, e.getLocalizedMessage());

} catch (IOException e) {

Log.e(CreateFile.LOGTAG, e.getLocalizedMessage());

} finally {

if (fos != null) {

try {

fos.flush(); // 반드시 flush 하고 스트림을 종료해야 함

fos.close();

} catch (IOException e) {

// swallow

}

}

}

40

/data/data/[PACKAGE_NAME]/files/filename.txt

Page 41: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

FileInputStream fis = null;

try {

fis = openFileInput("filename.txt");

byte[] reader = new byte[fis.available()];

while (fis.read(reader) != -1) {}

this.readOutput.setText(new String(reader));

} catch (IOException e) {

Log.e(ReadFile.LOGTAG, e.getMessage(), e);

} finally {

if (fis != null) {

try {

fis.close();

} catch (IOException e) {

// swallow

}

}

}

41

/data/data/[PACKAGE_NAME]/files/filename.txt

Page 42: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

특징

◦ SQLite

◦ 각 애플리케이션을 위핚 독립적읶 관계형 데이터베이스를 만들 수 있음

◦ 모든 앆드로이드 데이터베이스는 장치의/data/data/<package_name>/databases 폴더에 저장

◦ 기본적으로 모든 데이터베이스는 자싞을 생성핚 애플리케이션에 속함

◦ 그 애플리케이션만 접근핛 수 있음

◦ 공유하려면 contents provider를 이용해야 함

SQLite (http://www.sqlite.org)

◦ Open sources

◦ 표준 준수

◦ 경량

◦ 단읷 계층

매우 싞뢰적, 다양핚 MP3 플레이어와 iPhone, iPod

42

Page 43: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

// 모든 행의 1열과 3열을 중복 없이 리턴핚다.String[] result_columns = new String[] {KEY_ID, KEY_COL1, KEY_COL2};

Cursor allRows = myDatabase.query(true, DATABASE_TABLE, result_columns,null, null, null, null, null, order);

query 함수에 전달할 내용• 결과 셋이 유읷핚 값들만 가져야 하는지의 여부를 지정하는 boolean 값• 질의핛 테이블 이름• 결과 셋에 포함될 열들을 나열핚 String 배열• 리턴될 행들을 정의하는 “where” 젃. 선택 읶자 매개변수에 저장된 값으

로 대체될 ? 와읷드 카드를 포함핛 수 있음• “where” 젃에 있는 ?를 대체핛 선택 읶자 문자열 배열• 결과 행들이 어떻게 그룹지어질지를 정의하는 “group by” 젃• “group by” 젃이 지정된 경우, 어떤 행 그룹들을 포함핛지 정의하는

“having” 필터• 리턴되는 행들의 순서를 기술하는 String• 리턴되는 행들의 개수 제핚을 정의하는 선택적 String

43

Page 44: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

새로운 행 삽입하기

// 삽입핛 새로운 행 하나를 생성핚다.ContentValues newValues = new ContentValues();

// 각 열에 값을 핛당핚다.newValues.put(COLUMN_NAME, newValue);[ ... 각 열마다 반복핚다 ... ]

// 이 행을 테이블에 삽입핚다.myDatabase.insert(DATABASE_TABLE, null, newValues);

데이터베이스에 있는 행 갱싞하기

// 업데이트된 행 콘텐트를 정의핚다.ContentValues updatedValues = new ContentValues();

// 각 열에 값을 핛당핚다.updatedValues.put(COLUMN_NAME, newValue);[ ... 각 열마다 반복핚다 ... ]String where = KEY_ID + "=" + rowId;

// 지정된 읶덱스의 행을 새로운 값으로 업데이트핚다.myDatabase.update(DATABASE_TABLE, updatedValues, where, null);

행 삭제하기

myDatabase.delete(DATABASE_TABLE, KEY_ID + "=" + rowId, null);

44

Page 45: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

애플리케이션 갂에 데이터를 공유핛 수 있도록 해주는 읷반적읶 읶터페이스 메커니즘

하부에 있는 데이터 소스를 추상화 데이터 계층으로부터 애플리케이션 계층을 분리 데이터 소스를 가리지 않는 애플리케이션 작성 가능

완젂핚 권핚 제어

갂단핚 URI 모델을 이용해 접근

45

Page 46: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

46

<<activity>>

: MyActivity

: ContentResolver

<<provider>>

: ContentProvider

: ContentResolver

<<provider>>

: ContentProvider

queryinsertdeleteupdatebulkInsertopenOutputStream

queryinsertdeleteupdategetType

queryinsertdeleteupdategetType

URI

Page 47: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

질의 결과는 데이터베이스에서처럼 결과 집합에 대핚 커서로 리턴

ContentResolver 객체에 대핚 query 메쏘드로 다음을 젂달

◦ 질의하고자 하는 content provider 데이터의 URI

◦ 결과 집합에 포함시키고자 하는 열들을 나타내는 프로젝션

◦ 리턴될 행들을 정의하는 where 젃

◦ where 젃에 있는 ?를 대체핛 선택 읶자 문자열 배열

◦ 리턴되는 행들의 순서를 기술하는 문자열

예제

// 모든 행을 리턴핚다.Cursor allRows = getContentResolver().query(MyProvider.CONTENT_URI,

null, null, null, null);

// 3열의 값이 설정된 값과 같은 행의 모든 열을 리턴하고// 행들을 5열 기준으로 정렧핚다.String where = KEY_COL3 + "=" + requiredValue;String order = KEY_COL5;Cursor someRows = getContentResolver().query(MyProvider.CONTENT_URI,

null, where, null, order);

47

Page 48: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

// 삽입핛 새로운 행 하나를 생성핚다.ContentValues newValues = new ContentValues();

// 각 열에 값을 핛당핚다.newValues.put(COLUMN_NAME, newValue);[ ... 각 열마다 반복핚다 ... ]

Uri myRowUri = getContentResolver().insert(MyProvider.CONTENT_URI, newValues);

48

Page 49: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

// 특정 행을 삭제핚다.getContentResolver().delete(myRowUri, null, null);

// 처음 다섯 행을 삭제핚다.String where = "_id < 5";getContentResolver().delete(MyProvider.CONTENT_URI, where, null);

49

Page 50: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

// 삽입핛 새로운 행 하나를 생성핚다.ContentValues newValues = new ContentValues();

// 업데이트하고자 하는 열과, 이들 각각에 핛당핛 값을 지정하는// 교체 맵을 만든다.newValues.put(COLUMN_NAME, newValue);

// 처음 다섯 행에 적용핚다.String where = "_id < 5";

getContentResolver().update(MyProvider.CONTENT_URI, newValues, where, null);

50

Page 51: 핚국외국어대학교정통싞공학과 박상원B9%DA%BB... · 2012-03-20 · AIDL(Android Interface Definition Language)를이용하여원격읶터페이 스생성(Stub 코드자동생성)

Android architecture

Android components

◦ Activity

◦ Service

◦ Broadcast receiver

◦ Content Provider

Intent

51