programming/c

[Android] WebView | Thread

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()이 실행됨



나. 핸들러(Handler)


'안드로이드에서는 몇가지 제약사항이 있다. 그 중에 하나는 성능 문제로 인해 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