Messenger 클래스를 사용하여 액티비티와 서비스간에 통신을 위한 방법을 정리한다.
Messenger 클래스는 Handler를 Wrapping 하는 역할을 한다는데, 자세한건 검색 ㄱㄱ.
액티비티 코드
Messenger mOutputMessenger; Messenger mInputMessenger; protected void onCreate(Bundle savedInstanceState) { Intent intent = new Intent(this, SocketService.class); startService(intent); mInputMessenger = new Messenger(mHandler); } @Override protected void onResume() { super.onResume();
Intent intent = new Intent("com.example.SOCKETSERVICE"); bindService(intent, mSockSrvCon, BIND_AUTO_CREATE); } @Override protected void onPause() { super.onPause();
unbindService(mSockSrvCon); } ServiceConnection mSockSrvCon = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { mOutputMessenger = null; }
@Override public void onServiceConnected(ComponentName name, IBinder service) { mOutputMessenger = new Messenger(service);
Message msg = new Message(); msg.replyTo = mInputMessenger; msg.what = ValueDefine.SERVICE_HANDLE_MSG_REGISTER_MESSENGER; msg.arg1 = ValueDefine.LOGIN_ACTIVITY; try { mOutputMessenger.send(msg); } catch (RemoteException e) { e.printStackTrace(); } } }; Handler mHandler = new Handler(){ public void handleMessage(Message msg) { switch(msg.what){ case 1: break; default: break; } } }; |
서비스 코드
HashMap<Integer, Messenger> mMessengerList = new HashMap<Integer, Messenger>(); @Override public IBinder onBind(Intent intent) { return new Messenger(mHandler).getBinder(); } Handler mHandler = new Handler(){ public void handleMessage(Message msg) { switch(msg.what){ case ValueDefine.SERVICE_HANDLE_MSG_REGISTER_MESSENGER: mMessengerList.put(msg.arg1, msg.replyTo); break; default: break; } } }; |
액티비티 -> 서비스
Message msg = new Message(); msg.what = ValueDefine.SERVICE_HANDLE_MSG_SEND_DATA; msg.arg1 = ValueDefine.MSG_ACCOUNT_REG_REQ; msg.obj = data.toJSONByte();
try { mOutputMessenger.send(msg); } catch (RemoteException e) { e.printStackTrace(); } |
서비스 -> 액티비티
Messenger messenger = null; Message msg = new Message(); messenger = mMessengerList.get(ValueDefine.REGISTER_ACTIVITY); if(messenger != null){ msg.what = ValueDefine.MSG_ACCOUNT_REG_RSP; msg.obj = data; try { messenger.send(msg); } catch (RemoteException e) { e.printStackTrace(); } } |
'Programming' 카테고리의 다른 글
Android - Notification 선택시 전달값 null 일 때 (0) | 2016.09.03 |
---|---|
Android - SQLite 시간 함수 및 비교 (0) | 2016.09.03 |
Android - 로그캣(LogCat)에 로그 표시 안될 때. (0) | 2016.09.03 |
Android - 화면 꺼짐 상태에서 팝업 띄우기 (카톡처럼) (0) | 2016.09.03 |
Android - 서비스 실행 유무 확인 (0) | 2016.09.03 |