지금까지 제가 이해한 핸들러 작성 방식입니다.
예를 들어 메인엑티비티 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);
}