마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

service <~> activity 간 Message, Handler 질문입니다.

0 추천

안녕하세요 초보 개발자 입니다.

제가 타이머 관련 기능을 코딩하면서 activity에 처음 코딩을 하게 되었는데요, 타이머 시작 후 어플 종료시 타이머도 같이 종료되길래 알아본 결과 service<~>active 관계와  message, handler, bindservice 내용을 알게 되었고 공부하고 있습니다. 현재 여러 예제들을 공부하고 있는데요 궁금한점 때문에 질문 드립니다.

 

Main activity 

if (mServiceConnected) {
    try {
        Message msg = Message.obtain(null,
                BoundService.MSG_GET_TIMESTAMP, 0, 0);
        msg.replyTo = mActivityMessenger;
        mBoundServiceMessenger.send(msg);
        Toast.makeText(MainActivity.this , Integer.toString(msg.what), Toast.LENGTH_SHORT).show();
    } catch (RemoteException e) {
        e.printStackTrace();
    }
}
private final Messenger mActivityMessenger = new Messenger(
        new ActivityHandler(this));
static class ActivityHandler extends Handler {
    private final WeakReference<MainActivity> mActivity;

    public ActivityHandler(MainActivity activity) {
        mActivity = new WeakReference<MainActivity>(activity);
    }

    //@Override
    public void handleMessage(Message msg) {
        switch (msg.what) {
            case BoundService.MSG_GET_TIMESTAMP: {
                mActivity.get().mTimestampText.setText(msg.getData().getString(
                        "timestamp"));
            }
        }
    }
}

1. 코딩중 일부 입니다. 위 코딩 에서 Message obtain을 통해 msg.what값을 받고 

mBoundServiceMessenger.send(msg)를 통해 service에 값을 보내게 되는데요.

msg.replyTo 의 사용 목적이 궁금합니다. 

제 예상으로는 .send를 이용해서 service로 message를 전달한 후 

service의 handler 를 통해 다시 dataMessage를 activity로 받기 위해 msg.replyTo를 사용하는거 같습니다. 

만약 service의 message를 받는거라면 .send(msg) 다음에 msg.replyTo가 위치해야 하는것 같은데요 답변좀 부탁 드립니다.

2. service class에서 sendEmptyMessageDelayed(0,1000)와 count++를 이용하여 1초당 카운트증가하게끔 타이머를 만들예정인데요 혹시 관련 예제나 정보 있으시면 간략하게 아이디어 부탁드립니다.

 

1번이 메인 질문이구요 혹시 2번도 좋은 정보 있으시면 답변 부탁 드려요~ 감사합니다.

howho6455 (140 포인트) 님이 2016년 11월 4일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...