전기차충전기
[안드로이드] Handler
hyeok0724.kim@gmail.com
2021. 11. 23. 20:58
반응형
작성일: 21년 11월 23일
Index
1. handler 생성하기
2. Log 확인하기
1. handler 생성하기
- Start 버튼을 누르면 Thread가 동작됨
- Thread는 1초 간격으로 Handler에게 데이터를 전달함
- handler는 받은 데이터를 이용하여 처리함
private static final int SEND_MSG_01 = 1;
private static final int SEND_MSG_02 = 2;
ThreadTest01 t1 = new ThreadTest01("NameThreadTest01");
MyHandler myHandler = new MyHandler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
OnClickListener m_onClickListener = new OnClickListener() ;
Button btn_01 = (Button)findViewById(R.id.start);
btn_01.setOnClickListener(m_onClickListener);
Button btn_02 = (Button)findViewById(R.id.stop);
btn_02.setOnClickListener(m_onClickListener);
}
private class OnClickListener implements View.OnClickListener {
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.start:
Log.d("OnClickListener", "Press Button");
if (!(t1.isAlive())) {
Log.d("OnClickListener", "Thread Start");
t1 = new ThreadTest01("NameThreadTest01");
t1.start();
}
break;
case R.id.stop:
Log.d("OnClickListener", "Press Button2");
Log.d("OnClickListener", "Thread Stop");
t1.interrupt();
break;
}
}
}
private static class MyHandler extends Handler {
@Override
public void handleMessage(Message msg){
switch (msg.what){
case SEND_MSG_01:
Log.d("handleMessage()", "SEND_MSG_01 -> arg: " + msg.arg1);
Log.d("handleMessage()", "SEND_MSG_01 -> obj: " + msg.obj);
break;
case SEND_MSG_02:
Log.d("handleMessage()", "SEND_MSG_02 -> arg: " + msg.arg1);
Log.d("handleMessage()", "SEND_MSG_01 -> obj: " + msg.obj);
break;
default:
Log.d("handleMessage()", "default -> arg: " + msg.arg1);
Log.d("handleMessage()", "default -> obj: " + msg.obj);
break;
}
}
}
public class ThreadTest01 extends Thread{
public ThreadTest01(String thread_name){
setName(thread_name);
}
@Override
public void run() {
super.run();
try{
while(!isInterrupted()) {
Log.d("Thread", getName() + " Thread is Running");
Message message = myHandler.obtainMessage();
message.what = SEND_MSG_01;
message.arg1 = 1;
String information = new String("Thread 동작 중입니다.");
message.obj = information;
myHandler.sendMessage(message);
Thread.sleep(1000);
}
} catch (InterruptedException e) {
Log.e("Thread", getName() + " Thread Interrupted");
} finally {
Message message = myHandler.obtainMessage();
message.what = SEND_MSG_02;
message.arg1 = 2;
String information = new String("Thread 종료 중입니다.");
message.obj = information;
myHandler.sendMessage(message);
Log.d("Thread", getName() + " Thread is Stop");
}
}
}
2. Log 확인하기
- Start 버튼을 누르면 handler에서 Message의 What 데이터를 이용하여 arg1과 obj 데이터를 처리함
- Stop 버튼을 누르면 handler에서 Message의 What 데이터를 이용하여 arg1과 obj 데이터를 처리함
- 즉 데이터를 받으면 handler에 던져서 그곳에서 message에 arg1과 obj 데이터를 핸들러에서 처리하도록 함
- Thread간의 데이터를 주고 받을때 사용함
- 일반적으로 Handler는 데이터를 보고 처리해야하는 곳에 전달하는 전달자 역할을 함
반응형