●핸들러(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> |
'프로그래밍 > 안드로이드' 카테고리의 다른 글
안드로이드 프래그먼트(Fragment) (0) | 2015.04.01 |
---|---|
안드로이드 애니메이션2 (0) | 2015.03.30 |
안드로이드 쓰레드 (Thread) (0) | 2015.03.26 |
안드로이드 애니매이션1 (Animation) (0) | 2015.03.25 |
안드로이드 캔버스(Canvas) (0) | 2015.03.25 |
댓글