Louie NRT Story

[안드로이드] Handler 본문

전기차충전기

[안드로이드] 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는 데이터를 보고 처리해야하는 곳에 전달하는 전달자 역할을 함

 

반응형
Comments