반응형
  • 목차
    1. 메세지(Message) 란?
    2. 메세지(Message) 특징
    3. 메세지(Message) 송신 및 수신



  1. 메세지(Message) 란?
    메세지(Message)란 안드로이드에서 많이 쓰이는 데이터 전달 Class 임.
    자세한 내용은 구글(https://developer.android.com/reference/android/os/Message) 에서 확인가능
    지금 이 글을 보는 사람은 초보라 생각하고 설명함

    메세지는 쓰레드(Thread) 와 핸들러(Handler) 를 이용해서 사용한다는 내용은 많이 있는데 정작 어떤경우 사용해야 좋은지 초보자인 경우 잘 모르는 상황이 많음. 그런걸 간단하게 공유해보고자 함



  2. 메세지(Message) 특징
    메세지도 Thread 특징을 그대로 이어받아 사용하기 때문에 코드가 동작 중 로딩으로 인해 버벅거리는 경우는 없음
    UI 변경도 간섭을 할 수 있음 ( Thread 내부에서 UI 변경을 하려고 하면 [ Only the original thread that created a view hierarchy can touch its views ] 라는 내용의 에러 발생 확인 가능함 ) 
    물론 Activity.runOnUiThread( new Runnable() { ... } ) 함수를 이용할 수도 있지만 이런 방식도 가능하다는 것을 알았으면 함


    반응형
  3. 메세지(Message) 송신 및 수신
    기본적인 구조는 다음과 같음

    . 데이터가 공백이거나 Null 인 경우(code_0 는 int 형으로 알맞은 숫자를 선언해주면 가능)

    송신부 A 
    mhandler.sendEmptyMessage(code_0);

    수신부 A
    Handler mhandler = new Handler(){
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            switch(msg.whar){
                case code_0 :
                    break;
            }
        }
    }



    . 데이터( 정수 0) 존재하며 키값( 문자열 : DATA0 ) 지정하여 보내는 경우
      데이터는 정수, 실수, Byte, Char, String 배열 등등 다양한 변수를 담을 수 있음
      또한 데이터 개수가 증가할 때는 bundle 에 형식과 키값, 데이터를 실어주면 전달이 가능함

    송신부 B
    Message message = mhandler.obtainMessage(code_0);
    Bundle bundle = new Bundle();
    bundle.putInt("DATA0", 0);
    message.setData(data_value);
    mhandler.sendMessage(message);

    수신부 B
    Handler mhandler = new Handler(){
        @Override 
        public void handleMessage(@NonNull Message msg) { 
            super.handleMessage(msg);
            switch(msg.whar){
                case code_0 :
                Log.d("Message Data", msg.getInt("DATA0"));
                break;
            }
        }
    }​



    . 간단한 데이터 전달을 하는 경우
      형식을 정하지 않고 해당 메세지에 데이터만 실어 보냈기 때문에 수신부에서는 형변환이 필요함
      해당 방식을 이용하면 간단한 데이터를 Bundle 을 사용하지 않고 한줄에 데이터 전송이 가능
    송신부 C
    mhandler.sendMessage(Message.obtain(mhandler, code_0, "DATA"));

    수신부 C
    Handler mhandler = new Handler(){
        @Override 
        public void handleMessage(@NonNull Message msg) { 
            super.handleMessage(msg);
            switch(msg.whar){
                case code_0 :
                Log.d("Message Data", (String) msg.obj);
                break;
            }
        }
    }​

 

 

기본적인 메세지(Message) 송수신 방식에 대하여 설명해 봤다.

 

초심자가 보기에 복잡한 내용보다는 간단하고 바로 써먹을 수 있는 내용 위주로 작성하다 보니 자세한 설명은 빠져있을 수도 있다. 자세한 내용은 구글 다큐먼트를 참고 하거나 다른 블로그에도 내용이 많으니 참고하길 바람

 

메세지를 이용하는 다른 방안이나 좋은 의견있다면 언제든지 댓글로 부탁합니다. 

 

오늘도 코딩 화이팅~!!

반응형

+ Recent posts