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

핸들러 사용방법 질문 드립니다.

0 추천

지금까지 제가 이해한 핸들러 작성 방식입니다.

 

예를 들어 메인엑티비티 A와 스레드를 상속받은 외부 클래스 B가 있습니다.

A에 handler를 선언하여 msg.what를 사용해서 메세지를 구분하는 핸들러 객체를 선언하고

B클래스는 생성자를 만들어 handler를 받아올 수 있도록하고

생성자를 통해 받아온 핸들러를 B클래스에 만들어 둔 핸들러 객체에 저장합니다.

그리고 루퍼를 생성합니다. 이때 루퍼는 별도의 스래드를 만들어 루퍼를 선언하거나 HandlerThread를 선언하여 getLooper을 통해 가져옵니다.

 

여기까진 알겠습니다.

 

여기서 궁금한건 이겁니다.

1. 루프는 선언하기만 하면 되는겁니까?

2. 루프는 핸들러를 사용할 스래드 하나당 하나씩만 선언하는겁니까?

3. 아래 코드는 제가 지금 보고 있는 예제코드 중 일부입니다. 왜 굳이 핸들러 객체를 상속받은 이너클래스를 선언하는건지 궁금합니다.

//생성자
public BluetoothChatService(Context context, Handler handler) {
    mAdapter = BluetoothAdapter.getDefaultAdapter();
    mState = STATE_NONE;
    mHandler = handler;

    thread = new HandlerThread("HandlerThread");
    thread.start();
    // 루퍼를 만든다.
    mServiceLooper = thread.getLooper();
    mServiceHandler = new ServiceHandler(mServiceLooper);
}
private final class ServiceHandler extends Handler {
    public ServiceHandler(Looper looper) {
        super(looper);
    }

 

fms2014 (210 포인트) 님이 2018년 5월 31일 질문

1개의 답변

0 추천
 
채택된 답변
1. Service Handler 의 동작을 HandlerThread 의 Looper 를 사용하겠다고 되어 있네요 그냥 만든게 아닙니다.

2. 하나를 선언해도 되고 이미 선언되어 있는 mainLooper 를 가져다 써도 됩니다. 이건  필요한 걸 이용하면 됩니다.

3. 코드 전체를 보지 않아서 파악하기 힘드나 ServiceHandler 는 BluetoothChat 의 서비스에서 사용하는 Handler 이고

인자로 전달 받은 핸드러는 그 외의 상위 핸들러로 보입니다. 그리고 ServiceHandler 에서 mHandler 로 전달할 내용이 있을 수도 있구요
aucd29 (218,390 포인트) 님이 2018년 5월 31일 답변
fms2014님이 2018년 5월 31일 채택됨
...