안드로이드 개발 질문/답변
(글 수 45,052)
개발을 하면서 handler 에 대해 궁금한게 있어서요..
handler 에게 메세지를 보내면. sendMessage()
handler 가 handleMessage() 를 호출하면서 해당 메세지를 처리할 수 있는데요...
만약에...
임의로 (괄호는 대략적설명하기 위한 간단한 코드입니다.)
메세지를 하나 획득하고(obtainMessage())
메세지를 셋팅하고( msg.what = 100; )
메세지를 핸들러에게 보내고(sendMessage())
이런식으로 10000개를 했다고 가정했을때....
10000 개의 메세지를 다 처리하기 전에 어떤 이벤트가 발생하여
removeMessages(100) 이라는 함수가 호출될때...
처리 되지 못한 메세지는 다 삭제가 되는건가요??
아니면 하나의 메세지만 삭제가 되나요?
이런걸 확인 할 수 있는 방법이 따로 없는건가요??
(예를들어 메세지 큐의 사이즈, 메세지 큐에 있는 메세지들의 갯수?? 등등 ) 이런것들을 볼 수 있는 방법은 없나요??




Handler 에는 일정 시간이 지난 후 메시지를 처리하게 할 수 있는 함수들이 있습니다.
sendMessageDelayed(int what, long delayMillis), sendEmptyMessageDelayed(int what, long delayMillis) 등입니다.
아래 간단히 테스트 해본 코드입니다.
public class Main extends Activity { protected final String TAG = "Main"; protected final int TEST = 1; protected Handler handler= new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what){ case TEST: Log.d(TAG, "test"); break; } } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); for (int i = 0;i < 100; i++) { handler.sendEmptyMessageDelayed(TEST, 1000); } handler.removeMessages(TEST); } @Override protected void onDestroy() { super.onDestroy(); } }removeMessages 구문을 지운 경우와 그렇지 않은 경우 안드로이드 로그를 비교하여 보시면 removeMessages 함수를 사용한 경우 아무런 메시지도 처리 되지 않은 것을 확인하실 수 있을 겁니다.
몇개의 메시지가 등록되어 있는지 확인하는 함수는 없지만 처리되지 않은 메시지가 등록되어 있는지 확인하는 함수는 있습니다.
boolean hasMessages(int what)