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씩 증가합니다. 스레드때문
'Programming > Android' 카테고리의 다른 글
[Android] XmlPullPaser를 이용한 xml파싱 (0) | 2013.02.03 |
---|---|
[Android] 네트워크 비동기식 응답 핸들러 (0) | 2013.02.03 |
[Android] 뒤로가기 버튼을 누를시 경고창 (0) | 2013.02.03 |
[Android] Intent를 이용한 데이터전달 (1) | 2013.02.03 |
[Android] ListActivity (0) | 2013.02.03 |