Android/Thread, Handler 3

Android Thread with Handler example

Soul-Learner 2012. 7. 2. 12:58

Android 에서 개발자 정의 백그라운드 Thread와 Handler 클래스를 사용하는 예

시작버튼을 누르면 ImageView에 이미지를 1초에 한번씩 변경하여 보여주고 정지버튼을 눌러 쓰레드를 중지하는 예

main.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FF4444CC" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="onBtnClick" android:text="Thread Start" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="onBtnStop" android:text="Thread Stop" /> </LinearLayout> <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> </LinearLayout>


ThreadDemo.java

package my.android.test; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.widget.EditText; public class ThreadDemo extends Activity { ImageView imageView1; int imgID; boolean isRunning; Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if(imgID==R.drawable.ic_launcher) imgID=R.drawable.mountain; else imgID = R.drawable.ic_launcher; imageView1.setImageResource(imgID); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); imageView1 = (ImageView) this.findViewById(R.id.imageView1); } @Override public void onBtnClick(View v) { super.onStart(); isRunning = true; new Thread(new Runnable() { @Override public void run() { for(int i=0;i<10 && isRunning;i++) { try { Thread.sleep(1000); handler.sendMessage(handler.obtainMessage()); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); }

public void onBtnStop(View v) { isRunning = false; }

@Override protected void onStop() { super.onStop(); isRunning = false; } }