사용한 툴 : 안드로이드 스튜디오
사용 버전 : 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 |
▲ 스레드 상속받은 다른 클래스
'프로그래밍 > Java, Android' 카테고리의 다른 글
(Java) AWT (2) - Listener를 이용하여 Event Handler 설정 (0) | 2016.07.10 |
---|---|
(Java) awt 사용하기(1) - 화면 구성하기 (0) | 2016.07.10 |
(안드로이드) 서버에 POST 방식으로 데이터 송신 (1) | 2016.07.10 |
(안드로이드) 파일처리 - 파일 처리를 이용한 Simple 이미지 뷰어 Application (0) | 2016.07.10 |
(안드로이드) - 이클립스 프로젝트를 안드로이드 스튜디오에서 여는 방법 (0) | 2016.07.10 |