Handler 클래스로 표현되는 핸들러는 스레드 간에 메시지나 러너블 객체를 통해 메시지를 주고 받는 장치이다.

핸들러는 항상 하나의 스레드와 관련을 맺는데 자신을 생성하는 스레드에 부착되며 그 스레드의 메시지 큐를 통해 다른 스레드와 통신한다.


public void handleMessage(Message msg)


activity_man.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView
    android:id="@+id/mainvalue"  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:textSize="20sp" 
    android:text="MainValue : 0"
    />
<TextView
    android:id="@+id/backvalue"  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textSize="20sp" 
    android:text="BackValue : 0"
    />
<Button
    android:id="@+id/increase"  
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:onClick="mOnClick"
    android:text="Increase"
    /

</LinearLayout>


MainActivity.java

package com.example.android_test1;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener {
	int mMainValue = 0;
	int mBackValue = 0;
	TextView mMainText;
	TextView mBackText;
	Button increase;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		mMainText = (TextView)findViewById(R.id.mainvalue);
		mBackText = (TextView)findViewById(R.id.backvalue);
		increase = (Button)findViewById(R.id.increase);

		increase.setOnClickListener(this);

		BackThread thread = new BackThread();
		thread.setDaemon(true);
		thread.start();
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		mMainValue++;
		mMainText.setText("MainValue : " + mMainValue);
	}

	class BackThread extends Thread {
		public void run() {
			while (true) {
				mBackValue++;
				mHandler.sendEmptyMessage(0);
				try { Thread.sleep(1000); } catch (InterruptedException e) {;}
			}
		}
	}

	Handler mHandler = new Handler() {
		public void handleMessage(Message msg) {
			if(msg.what ==0) {
				mBackText.setText("BackValue : " + mBackValue);
			}
		}
	};
 

}


thread.setDaemon은 메인 스레드가 종료될떄 강제 종료되는 스레드입니다.


BackThread에서 mHandler로 메시지를 전송해서 그 값에 따라 mBackText에 값을 넣어 표시합니다.





MainValue 는 Increase 버튼을 누를때마다 증가하고

BackValue는 1초에 1씩 증가합니다. 스레드때문



Posted by 세이나린
,