●핸들러(Handler)

- 안드로이드는 자바표준의 쓰레드를 그대로 사용한다. 단, 주의할건 쓰레드의 대상이 UI제어일 경우 직접 제어할 수 없고 반드시 Handler나, AsyncTask를 이용해야 한다.


안드로이드에서는 메인쓰레드만 UI를 제어할 수 있고, 이벤트를 제어할 수 있다. 따라서 개발자가 정의한 쓰레드를 이용한 UI 제어를 허용하지 않는다. 그래서 개발자 정의 쓰레드는 핸들러를 이용하여 간접적인 요청을 시도하여 그래픽을 처리할 수 있다.







●예제


- CountActivity.java

package study.thread;


import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;


import com.example.day0328.R;


public class CountActivity extends Activity{

int cnt=0;

EditText editText;

Button btn;

Thread thread;

Handler handler;

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.count);


editText = (EditText)findViewById(R.id.editText);

btn = (Button)findViewById(R.id.btn);

               //익명 이너클래스로 구현

               //클래스 내부의 클래스, 재사용하지 않을 클래스를 만들때 주로 사용한다.

handler = new Handler(){

public void handleMessage(android.os.Message msg) {

editText.setText(""+cnt);

}

};

//익명 이너클래스로 구현

thread = new Thread(){

public void run() {

super.run();

while(true){

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

cnt++;

handler.sendEmptyMessage(0);

}

}

};

btn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

thread.start();

}

});

}

}





- count.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"

    android:orientation="vertical"

    android:gravity="center" >

    

    <EditText 

        android:id="@+id/editText"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="0"/>

    

    <Button 

        android:id="@+id/btn"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="시작"/>

    

    

</LinearLayout>
















Posted by -현's-

댓글을 달아 주세요