전체 글

(1)

서비스/스레드/DB

최 민

(2)

 Service

 안드로이드는 서비스에게 비활성 액티비티보다 높은 우선순위 부여

 시스템이 리소스를 필요로 할 때 서비스가 종료될 가능성은 적 음

 서비스가 종료되었더라도 리소스가 충분해지면 즉시 재시작

 GUI 없이 실행

 Activity, Broadcast receiver와 같이 애플리케이션 프로세스의 메 인 쓰레드 내에서 실행

•좋은 반응성을 가지려면 시간이 많이 드는 처리(네트워크 조회 등) 를 백그라운드 쓰레드로 옮겨야 함

 UI 없이 알림 Notification, Toast를 이용하여 정보 제공 서비스

(3)

 Toast

 활성 애플리케이션의 포커스를 빼앗지 않은 채 사용자에게 정보 를 표시하기 위해 사용되는 일시적 성격의 non-modal 다이얼로 그 박스 메커니즘

 Notification

 보다 견고한 사용자 경보 메커니즘

 사용자의 주의를 끄는 모든 동작 (벨 울림, 진동, 불빛 깜박임) 이 안드로이드에서는 Notification을 통해 이용 가능

 Alarm

 애플리케이션 수명 주기의 제어 바깥에서 정해진 시간에 Intent 를 발생시키기 위한 메커니즘

서비스

(4)

 서비스 소개

 두 가지 기능

•백그라운드 작업 수행

•IPC(Inter-Process Communication)을 위한 원격접속 가능한 오브젝 트를 만들어내는 것

 백그라운드에서 실행되면서 Content Provider를 업데이트하고, Intent를 발생시키며, Notification을 만들어 냄

•애플리케이션에 속한 Activity가 화면에 보이지 않거나, 비활성 상태 가 되거나, 혹은 종료된 이후에도 정규 처리나 이벤트 처리를 수행 하기 위한 방법

•Service는 GUI 없이 다른 Service, Activity, Broadcast Receiver를 포 함한 다른 애플리케이션 컴포넌트로부터 시작, 중지, 제어됨

서비스

(5)

 서비스 소개

 특징

•비활성 Activity나 눈에 보이지 않는 Activiti보다 높은 우선순위 부 여

•런타임의 리소스 관리에 의해 종료될 가능성 낮음

•Foreground 서비스가 필요한 리소스를 얻지 못할 때만 종료

 예

•사용자 상호작용이 거의 드물거나 간헐적으로 필요한 애플리케이 션

– MP3 플레이어, 스포츠 점수 모니터

•안드로이드 내

– 위치 관리자, 미디어 컨트롤러, 알림 관리자

서비스

(6)

서비스 Lifecycle

OnCreate() OnStart()

OnDestroy()

Service is Shut down

Service is Running

Service started by startService()

The service is stopped (no callback)

OnCreate() OnBind ()

OnDestroy()

Service is Shut down Service created by

bindService()

Client interacts with the service

onUnbind()

OnRebind()

startService() : onCreate()  onStart() 메소드 호출

bindService() : onCreate()  onBind() 메소드 호출 : 이 경우 onStart()는 호출되지 않음을 주의

(7)

서비스 만들기

public class MyService extends Service {

@Override

public void onCreate() { }

@Override

public IBinder onBind (Intent intent) { }

@Override

public void onStart(Intent intent, int startId) {

} }

(8)

 Service 시작, 제어, 그리고 상호작용

 Service 등록

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

 암시적인 서비스 실행

•startService (new Intent(MyService.MY_ACTION));

 명시적인 서비스 실행

•startService(new Intent(this, MyService.class));

서비스 제어

(9)

서비스 실습

(10)

 Android 프로젝트 생성

 프로젝트 명 : ServicesDemo 서비스 실습

1. 클릭

(11)

 MyService.java 서비스 실습

(12)

 Raw

 Mp3 파일 등록 서비스 실습

(13)

 MyService.java

(14)

 ServicesDemo.java 서비스 실습

(15)

 ServicesDemo.java 서비스 실습

(16)

서비스 실습

(17)

서비스 실습

(18)

 응답없는 애플리케이션 (ANR : Application Not Responding) 이 벤트

 5초 동안 사용자의 입력에 대해서 반응을 보이지 않는 것

 강제 종료

 메인 UI 쓰레드는 5초라는 지정된 시간안에 무조건 반응해야 함

 긴 계산시간이 요구되는 작업들은 반드시 별도의 쓰레드로 수행 쓰레드

(19)

 쓰레드를 사용해야 할 때

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

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

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

 Activity, Service, Broadcast Receiver 등을 포함한 모든 안드로이 드 애플리케이션 컴포넌트는 메인 애플리케이션 쓰레드 위에서 동작

 어떤 한 컴포넌트 내에서 시간이 많이 드는 처리  다른 모든 컴포넌트를 블록시킴

쓰레드

(20)

쓰레드

(21)

 멀티쓰레딩(multi-threading)의 장점

 프로세스의 자원을 공유면서 독립적으로 실행되는 실행흐름

 병행실행 (Concurrent execution)을 실현

 메인 애플리케이션은 사용자 인터페이스/입력을 관리

 시간이 오래 걸리는 계산은 background thread로 수행

 다중 프로세서, 멀티코어 CPU의 시스템에서 특히 유용(성능향 상)

쓰레드

(22)

쓰레드 예제

Private void mainProcessing() {

// 이는 시간이 많이 드는 작업을 자식 쓰레드로 옮긴다.

Thread thread = new Thread(null,

doBackgroundThreadProcessing, “Background”);

thread.start();

} Private Runnable doBackgroundThreadProcessing = new Runnable() { public void run() {

backgroundThreadProcessing() ; }; }

Private void backgroundThreadProcessing() { [ … 시간 소모적인 작업들 … ]

}

(23)

 Thread 클래스 상속

 Class MyThread extends Thread

 Runnable 인터페이스 구현

 Class MyThread extends A implements Runnable

(24)

 Android 프로젝트 생성

 프로젝트 명 : ThreadTestPrj 서비스 실습

1. 클릭

(25)

쓰레드 실습

(26)

쓰레드 실습

(27)

쓰레드 실습

(28)

 핸들러

 핸들러는 메시지 큐에 Message 와 Runnable 객체를 send 하거 나 process 한다

 핸들러는 메인 UI 쓰레드와 자동으로 연결됨

 스케쥴링

 메시지 큐에 있는 작업들을 여러 쓰레드에서 처리

 Message와 Runnable 객체를 스케쥴링

•Message는 ‘send’로, runnable 객체는 ‘post’로 전달함

 별도의 쓰레드에서 작업한 결과는 핸들러가 있는 메인 UI 쓰레 드로 리턴되어 클래스들과 함께 수행

쓰레드와 핸들러

(29)

 핸들러의 두가지 활용

 Message와 runnable 객체를 스케쥴링

 한 쓰레드가 다른 쓰레드에서 수행할 작업을 메시지 큐를 통해 전달

 쓰레딩과 UI

 [주의사항]

 Background 쓰레드는 UI를 건드릴 수 없음

 메인 쓰레드만이 Activity의 View를 접근할 수 있음 쓰레드와 핸들러

(30)

 핸들러의 메시지큐 사용

 메인 쓰레드와 통신하기를 희망하는 secondary thread는 obtainMessage() 메소드를 호출하여 message token을 요청함

•to get the Message object out of the pool.

 Token을 획득하면, background thread는 메시지 토큰에 내용을 채운뒤 sendMessage() 핸들러의 메시지 큐로 전달함

 핸들러는 handleMessage() 메소드를 호출하여 main thread에 도착하는 새로운 메시지를 지속적으로 체크한다.

 메시지 큐에서 꺼내어진 메시지는 메인 쓰레드에게 데이터를 리 턴하거(by send)나 runnable 객체의 실행을 요청(by post) 할 수 있음

쓰레드와 핸들러

(31)

 시스템에 부하를 줄 수 있으므로 장시간 동안 서비스를 해야 하 는 프로그램은 추천하지 않는다.

 만약 사용자가 더 사용할 가능성이 없는 경우라면 프로그램을 종 료할 때 함께 종료하는 것이 바람직함

 필요하다면 사용자에게 옵션으로 제공하여 선택할 수 있게 만드 는 것이 좋음

장시간 서비스 프로그램에 대한 주의사항

(32)

GUI 작업을 위한 쓰레드 동기화

// 메인 쓰레드에서 핸들러를 초기화한다.

private Handler handler = new Handler();

private void mainProcessing() {

Thread thread = new Thread (null,

doBackgroundThreadProcessing, “Background”);

Thread.start();

}

private Runnable doBackgroundProcessing = new Runnable() { public void run() {

backgroundThreadProcessing();

}; }

(33)

GUI 작업을 위한 쓰레드 동기화

private void backgroundThreadProcessing() { [ … 시간 소모적인 작업들 … ]

handler.post(doUIpdateGUI);

}

private Runnable doUpdateGUI = new Runnable { public void run() {

updateGUI();

}; }

private void updateGUI() {

[ … 다이얼로그를 오픈하거나 GUI요소를 수정할 수 있다 … ]

}

(34)

Using Messages

(35)

 AndroidManifest.xml

 <application … > tag에서 android:debuggable=“true” 속성 추 가

라인 단위 디버깅

7. 디버깅 및 이벤트핸들링

(36)

 android:debuggable="true”를 설정하지 않는 경우

 Wating For Debugger화면에서 더 이상 진행되지 않음

 개발시에만 넣어두고 실제 릴리즈시에는 삭제 라인 단위 디버깅

7. 디버깅 및 이벤트핸들링

(37)

라인 단위 디버깅

7. 디버깅 및 이벤트핸들링

(38)

라인 단위 디버깅

7. 디버깅 및 이벤트핸들링

(39)

ADB

7. 디버깅 및 이벤트핸들링

(40)

ADB

7. 디버깅 및 이벤트핸들링

(41)

 UI 설계

CheckBox/RadioButton 구현

9. 위젯

8. UI 설계 및 속성 지

(42)

 속성 지정

 TextView

9. 위젯

컨트롤 속성 지정

TextView01

android:id="@+id/TextView01"

android:layout_height="wrap_content"

android:layout_width="wrap_content”

android:text=“Color Setting Mode"

TextView02

android:id="@+id/TextView02"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text=“Color Setting"

(43)

 속성 지정

 TextView

9. 위젯

컨트롤 속성 지정

TextView03

android:id="@+id/TextView03"

android:layout_height="wrap_content"

android:layout_width="fill_parent"

android:gravity="center"

android:background="#FFFFFF"

android:text="화면 설정"

(44)

RadioGroup/RadioButton

9. 위젯

컨트롤 속성 지정

RadioGroup01

• android:id="@+id/RadioGroup01"

• android:layout_width="wrap_content"

• android:layout_height="wrap_content"

• android:orientation="horizontal"

RadioButton01

• android:id="@+id/RadioButton01"

• android:layout_width="wrap_content"

• android:layout_height="wrap_content"

• android:text="Set"

• android:width="100dip"

• android:checked="true"

(45)

 CheckBox

RadioGroup/RadioButton

9. 위젯

컨트롤 속성 지정

CheckBox03

android:id="@+id/CheckBox03"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text=“Blue"

(46)

 Main.xml

CheckBox/RadioButton 구현

9. 위젯

12. XML code 추가 확인

(47)

 R.java

CheckBox/RadioButton 구현

9. 위젯

13. id 클래스 변수 추가 확인

(48)

 Import

CheckBox/RadioButton 구현

9. 위젯

14. Coding

(49)

 onCreate() Method

9. 위젯

15. Coding

(50)

 onClickListener rdoScreen_listener 구현

9. 위젯

16. Coding

(51)

 onClickListener setColor_listener 구현 CheckBox/RadioButton 구현

9. 위젯

17. Coding

(52)

 Android 프로젝트 실행 CheckBox/RadioButton 구현

9. 위젯

18. 클릭

19. 클릭

20. 클릭

(53)

CheckBox/RadioButton 구현

9. 위젯

21. 클릭

22. 결과 확인

(54)

 Android_CheckBox/RadioButton 프로젝트

 Android_CheckBoxRadioButton.java 파일을 수정하 여 아래 그림과 같이 바탕색을 변경하도록 프로그래밍 하시오.

실습 3 : CheckBox/RadioButton 구현

9. 위젯

(55)

 프로젝트 구현 방법

 Main.xml 의 LinearLayout 속성 추가

android:id="@+id/LinearLayout01"

 Android_CheckBoxRadioButton.Java 파일 수정

private LinearLayout objLayout; //LinearLayout 객체 선언

import android.widget.LinearLayout;

objLayout =

(LinearLayout)findViewById(R.id.LinearLayout01);

objLayout.setBackgroundColor(bkColor);

실습 3 : CheckBox/RadioButton 구현

9. 위젯

(56)

 기본 버튼 사용하기

 Android.widget.Button 클래스는 안드로이드 SDK의 기본적인 버튼 구현을 제공

 버튼 클릭 이벤트(event) 핸들러 추가하기

 토스트 메시지 나타내기

•토스트는 간단한 메시지를 화면에 잠깐 동안 표시하는 수단

•안드로이드에서 매우 자주 유용하게 활용됨

 Button.setOnClickListener() 메소드에 구현 실습 3 : CheckBox/RadioButton 구현

9. 위젯

(57)

버튼, 체크박스, 라디오버튼

9. 위젯

setOnClickListener() 인스턴스를 정의할 때 반드시 onClick() 메소드를 정의해야 함

(58)

버튼, 체크박스, 라디오버튼

9. 위젯

(59)

버튼, 체크박스, 라디오버튼

9. 위젯

(60)

 체크박스 (CheckBox)

 한 목록에서 한번에 여러 개 항목들을 선택가능

 체크 버튼과 오른쪽의 텍스트로 구성

 토글버튼 (ToggleButton)

 체크상자와 행동 방식이 유사

 체크/해제에 따른 체크 상자의 모습 변화는 운영체제가 처리

 개발자는 버튼 상태 변경에 따른 응용 프로그램의 행동에만 집 중

 textOn : 켜진 상태의 텍스트에 해당하는 특성

 textOff : 꺼진 상태의 텍스트에 해당하는 특성 버튼, 체크박스, 라디오버튼

9. 위젯

(61)

버튼, 체크박스, 라디오버튼

9. 위젯

(62)

버튼, 체크박스, 라디오버튼

9. 위젯

(63)

 RadioGroup & RadioButton

 기본적인 동작은 역시 안드로이드 플랫폼이 처리함

 라디오 버튼 상태 변경에 따라 응용 프로그램이 해야할 일만 고 려

 라디오 버튼 선택이 변할 때마다 호출될 콜백 메소드를 등록

 RadioGroup 전체 해제

 RadioGroup의 모든 RadioButton 객체를 체크되지 않은 상태로

 외부 한 버튼이 클릭되면 RadioGroup 전체가 해제되도록 함 라디오버튼 (RadioButton)

9. 위젯

(64)

라디오버튼 (RadioButton)

9. 위젯

(65)

라디오버튼 (RadioButton)

9. 위젯

(66)

라디오버튼 (RadioButton)

9. 위젯

(67)

 Toggle Button

 기능

•Toggle 스위치(On/Off) 기능 제공 Toggle Button

9. 위젯

(68)

 Android 프로젝트 생성

 프로젝트 명 : Android_ToggleButton Toggle Button 구현

9. 위젯

1. 클릭

(69)

Toggle Button 구현

9. 위젯

3. 클릭

2. Android_ToggleButton 입 력

4. Android_ToggleButton 입력

5. com.inhatc.Android_ToggleButton

6. Android_ToggleButton 입 입력

7. 클릭 력

(70)

 UI 설계 Toggle Button 구현

9. 위젯

8. UI 설계 및 속성 지정

(71)

 TextView, ToggleButton 속성 지정 Toggle Button 구현

9. 위젯

컨트롤 속성 지정

TextView

android:layout_height="wrap_content"

android:id="@+id/txtView"

android:text="Toggle Button"

android:layout_width="fill_parent"

android:gravity="center_horizontal"

android:background="#FFFFFFFF"

ToggleButto n

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/tglOnOff"

android:text="Off"

(72)

 TextView, ToggleButton 속성 지정 결과 Toggle Button 구현

9. 위젯

9. 속성 지정 결과 확인

(73)

 Main.xml 저장 Toggle Button 구현

9. 위젯

10. 클릭

11. 클릭

(74)

 Main.xml Toggle Button 구현

9. 위젯

12. XML code 추가 확인

(75)

 onCreate() Method 구현

Toggle Button 구현

9. 위젯

14. Coding

(76)

 Android 프로젝트 실행 Toggle Button 구현

9. 위젯

15. 클릭

16. 클릭

17. 클릭

(77)

Toggle Button 구현

9. 위젯

18. 클릭

19. 클릭

20. 실행 결과 확인

(78)

 Spinner

 하나의 TextView가 아닌 다수의 TextView 객체들의 목록

 선택된 텍스트를 Spinner에서 직접 가져올 수는 없음

 대신, 선택된 View를 추출하고 그것에서 텍스트를 가져와야 함 스피너 (Spinner)

9. 위젯

(79)

 Spinner 스피너 (Spinner)

9. 위젯

(80)

 Android 프로젝트 생성

 프로젝트 명 : Android_Spinner 스피너 (Spinner)

9. 위젯

1. 클릭

(81)

스피너 (Spinner)

9. 위젯

3. 클릭

2. Android_Spinner 입 력

4. Android_Spinner 입력

5. com.inhatc.android_Spinner 입

6. Android_Spinner 입력

7. 클릭

(82)

 UI 설계 스피너 (Spinner)

9. 위젯

8. UI 설계 및 속성

지정

(83)

 TextView01, Spinner01 속성 지정 스피너 (Spinner)

9. 위젯

컨트롤 속성 지정

TextView01

• android:layout_height="wrap_content"

• android:id="@+id/txtTitle"

• android:layout_marginTop="5dip"

• android:layout_width="fill_parent"

• android:text="Select a mobile phone"

Spinner01

• android:layout_height="wrap_content"

• android:layout_width="wrap_content"

• android:minWidth="300dip"

• android:id="@+id/spnDevice"

(84)

 TextView01, Spinner01 속성 지정 결과 스피너 (Spinner)

9. 위젯

9. 속성 지정 결과 확인

(85)

 Main.xml 저장 스피너 (Spinner)

9. 위젯

10. 클릭

11. 클릭

(86)

 main.xml 스피너 (Spinner)

9. 위젯

12. XML code 추가 확인

(87)

 itemlist.xml 생성 스피너 (Spinner)

9. 위젯

13. 마우스 오른쪽 버튼 클 릭

15. 클릭

14. 클릭

(88)

스피너 (Spinner)

9. 위젯

16. 클 릭

17. 클

(89)

스피너 (Spinner)

9. 위젯

18.

“itemlist.xml”

입력

(90)

 itemlist.xml

•Item 지정 스피너 (Spinner)

9. 위젯

19. XML code 추가 확인

(91)

 Android_Spinner.java 스피너 (Spinner)

9. 위젯

21. Coding

(92)

 Android 프로젝트 실행 스피너 (Spinner)

9. 위젯

22. 클릭

23. 클릭

24. 클릭

(93)

스피너 (Spinner)

9. 위젯

25. 클릭

26. 클릭

(94)

 ListView

 기능

•Scrolling되는 하나의 column list를 출력하는 기능 제공 ListView

9. 위젯

(95)

 ArrayList – ArrayAdapter - List View 관계 ListView 구현

9. 위젯

iPhone 3GS Nexus One Motoroi

Array Adapter

List 내용

List View 내용 update

(96)

 Android 프로젝트 생성

 프로젝트 명 : Android_ListView ListView 구현

9. 위젯

1. 클릭

(97)

ListView 구현

9. 위젯

3. 클릭

2. Android_ListView 입력

4. Android_ListView 입력

5. com.inhatc.android_ListView 입력

6. Android_ListView 입력

7. 클릭

(98)

 UI 설계 ListView 구현

9. 위젯

8. UI 설계 및 속성 지정

(99)

 EditText, ListView 속성 지정 ListView 구현

9. 위젯

컨트롤 속성 지정

EditText

•android:layout_height="wrap_content"

•android:id="@+id/etxtInput"

•android:hint="Input your item"

•android:width="300dip"

•android:layout_width="fill_parent"

•android:singleLine="true"

ListView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:id="@+id/lstPhone"

(100)

 EditText, ListView 속성 지정 결과

9. 위젯

9. 속성 지정 결과 확

(101)

 Main.xml 저장 ListView 구현

9. 위젯

10. 클릭

11. 클릭

(102)

 Main.xml ListView 구현

9. 위젯

12. XML code 추가 확인

(103)

 Android_ListView.java

 객체 선언 ListView 구현

9. 위젯

14. Coding

(104)

ListView 구현

9. 위젯

15. Coding

(105)

 Android 프로젝트 실행 ListView 구현

9. 위젯

16. 클릭

17. 클릭

18. 클릭

(106)

ListView 구현

9. 위젯

19. 클릭

20. “Xperia X1” 입력 후 Enter Key 누름

21. ListView에

“Xperia X1”추가 확인

(107)

 Android_ListViewPractice1

 AndroidPractice_Listview.java 파일을 프로그래밍하여 아래 그림 과 같이 구현하시오.

•단계 1: ListView에서 다중 선택 가능 실습 1 : ListView 구현

9. 위젯

수치

Updating...

참조

Updating...

관련 주제 :