사용한 툴 : 안드로이드 스튜디오

사용 버전 : API18~22


핸들러란 메인스레드에 무리를 안주기 위해 있는 것으로, 서브 스레드에서 메인 스레드로 접근할 때 직접 접근하지 않고 핸들러를 이용해서 보내야 한다.

핸들러에 메시지를 보내면 핸들러의 handleMessage(Message) 메소드로 오게되는데  Message 안에는 what으로 어떤 값(정수값)이 왔는지 확인 할 수 있다.


액티비티에 핸들러를 추가한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private final Handler m_Handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what){
            case MESSAGE_SELECTING: //미리 위에서 public static final int로 설정
 
                selectBeacon();
                break;
            case MESSAGE_SCANNING:
                tvState.setText("스캐닝 중...");
                centralManager.startScanning();
                break;
            case MESSAGE_SERVERSTATE:
                String strTemp = msg.getData().getString("Result");
                if(strTemp.equals("1"))
                    tvState.setText("출석체크 완료");
                else
                    tvState.setText("서버에 전송 오류");
        }
    }
};
 
cs

 

▲ ScanConnActivity.java


 

1
2
3
Message msg;
msg = mHandler.obtainMessage(ScanConnActivity.MESSAGE_SELECTING);
mHandler.sendMessage(msg);
cs

 

▲ 스레드 상속받은 다른 클래스


핸들러에 메시지를 보낼 때 값을 같이 보내고 싶다면 Bundle로 값을 추가하거나 Message내에 arg1(int),arg2(int), obj(Object) 변수에 넣으면 된다.

 

1
2
3
4
5
6
Bundle bundle = new Bundle();
bundle.putString("Result",isOk);
msg = mHandler.obtainMessage(ScanConnActivity.MESSAGE_SERVERSTATE);
msg.setData(bundle);
mHandler.sendMessage(msg);
 
cs

 ▲ 스레드 상속받은 다른 클래스


+ Recent posts