5. WebView
5.1 WebView란?
Android에 내장되어 있는 Web browser; Web browsing을 할 수 있는 View
가. 실습예제
1) AndroidManifest.xml 00:01
2) main.xml 00:41
3) MainActivity.java 00:44
4) web1.xml 00;55
5) BrowserDemo1.java 00;55
6) assets/html/hello.html 00;55
7) BrowserDemo2.java 00;55
8) web2.xml 00;55
9) BrowserDemo3.java 00;55
6. Thread
가. Thread
'안드로이드에서도 기본적으로 자바에서 하던 스레드 방식과 같다. 단, 몇가지 추가된 코드들이 있다.
1) 멀티 스레드(Multi Thread)
한번에 여러 개의 작업을 동시에 처리할 수 있음
'싱글 스레드는 한번에 하나의 작업밖에 처리를 못하지만 멀티 스레드는 한번에 여러개의 작업을 동시에 처리할 수 있다.
2) 안드로이드의 멀티 스레드
리눅스 : 멀티 스레드 운영체제
자바 : 멀티 스레드 지원
3) 스레드를 생성하는 두 가지 방법
Thread() 클래스를 extends 하는 방법
Thread(Runnable runnable)
4) 스레드는 고유의 메모리 스택을 가지며 메인 스레드와는 별도로 CPU 시간을 할당 받아 실행
5) 스레드에서 할 작업은 run() 안에 작성
6) start()를 호출하면 run()이 실행됨
'안드로이드에서는 몇가지 제약사항이 있다. 그 중에 하나는 성능 문제로 인해 background thread는 main 화면을 고칠 수가 없다. 그래서 중간 역할을 하는 것이 handler!
1) 핸들러를 생성하면 내부적으로 별도의 스레드가 생성됨
한번에 여러 개의 작업을 동시에 처리할 수 있음
2) 핸들러에서 내부적으로 생성한 스레드로 들어오는 메세지들을 순차적으로 처리함
3) 메세지가 도착하면 handleMessage()가 자동 호출
public void handleMessage(Message msg)
Message msg
스레드 간��� 통신 내용을 저장하는 객체
단순한 신호나 명령뿐 아니라 복잡한 추가 정보도 전달받아야 하므로 여러 개의 필드들을 가진다.
4) 각 필드의 구체적인 값은 메세지마다 다르게 정의됨
필드 |
설명 |
int what |
메세지의 의미를 설명. 의미가 정해져 있지는 않으며 핸들러별로 지역적이므로 다른 핸들러와 충돌할 위험은 없음. |
int arg1 |
메세지의 추가 정보 |
int arg2 |
메세지의 추가 정보 |
Object obj |
정수만으로 메세지를 기술할 수 없을 때의 임의의 객체를 보낸다. |
Messenger replyTo |
메세지에 대한 응답을 받은 객체를 지정 |
'자세하게 알 필요는 없고, 보내는 값과 받는 값이 일치하는 것만 확인하면 된다.
5) 메세지를 보내는 쪽에서 전달하고자 하는 내용을 Message 객체에 저장하여 핸들러로 전송할 때 다음 메서드를 사용
boolean Handler.sendEmptyMessage(int what)
boolean Handler.sendMessage(Message msg)
boolean Handler.sendMessageAtFrontOfQueue(Message msg)
1) activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="진행률" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="비동기작업" />
</LinearLayout>
2) MainActivity.java 04;39
3) progress.xml 04;46
4) ProgressActivity.java 05;29
5) async.xml 30;40