좋은 질문이시네요
앱에서 어떠한 동작을 처리하고자 할때 메인 쓰레드에서 처리하느 것과
별도의 쓰레드를 만들고 거기서 일을 처리 하는 것으로 나눌 수 있습니다
메인 쓰레드에서 일을 처리할때는 activity,service 등의 싸이클 내에 코드를
넣어서 동작하는 경우 메인 쓰레드에서 동작하는 것이라고 말할 수 있습니다
그럼 여기서 activiy에 Handler h = new Handler()를 만들고 여기에 Runnable을
만들어서 handler에 이 Runnable을 동작 시킨다면 이 Runnable은 메인쓰레드에서
동작 하게 됩니다
안드로이드에서 handler를 검색해 보시면 생성자가 4가지 있습니다
자세한 내용은 검색해 보시고 간략하게 설명드리면 handler에 looper나 Callback
등을 생성하여 설정하지 않고 생성을 하면 이 handler는 메인 쓰레드의 looper와
메세지 콜백에 연결되어 사용됩니다
따라서 이 핸들러에 연결된 runnable은 메인쓰레드의 메세지 큐에 연결되 메인쓰레드
에서 처리를 하게 됩니다
그런데 이 메인쓰레드는 굉장히 바쁜녀석입니다 메인쓰레드는 앱에 연결된 activity나
service, 화면 이벤트등 단말에서 앱으로 들어오는 정보들을 모두 거쳐서 처리하는
녀석으로 짧은 시간안에 동작들을 처리하고 다음 입력을 기다려야 합니다
그래야 우리가 앱에서 어떠한 동작을 요구해도 빠르게 처리하여 결과를 보여주거나
동작을 하게 됩니다
이중에는 화면의 view들의 처리를 요하는 정보도 들어오고 처리하게 됩니다
위에서 이야기 하신 이러한 view들에는 이 메인 쓰레드의 handler와 연결되어 처리
할 수 있도록 되어 있습니다
이러한 것이 위에서 코드로 적으신 edit.postDelayed(new Runnable() 부분입니다
여기서 요청하는 부분은 모두 메인쓰레드에 연결되어 처리 됩니다
따라서 acitivy에서 Handler h = new Handler()를 통한 runnable의 처리와
view.post(new Runnable)은 같은 메인 쓰레드에서 처리 된다고 할 수 있습니다
위와 같은 것을 간단하게 알아보는 방법은 로그를 확인 하는 방법이 있습니다
예를 들어 handler를 통하여 runnable을 만들고 거기에 연결하여 처리할때 강제로
에러가 나게 만들어 테스트하여 발생되는 로그와 view의 post에 runnalbe을 연결하여
위와 같이 강제로 에러가 나게 하여 발생되는 로그를 확인해 보면 모두 같은 main
thread에 연결되어 처리 된다고 확인 할 수 있습니다
그러면 이러한 메인쓰레드에 동작시킬때 우리가 주의 할점은 위에서도 말씀드렸드시
메인쓰레드는 굉장히 해야 할일이 많고 바쁜녀석입니다
이러한 메인쓰레드에 우리가 복잡한 일이나 io와 같이 시간이 오래 걸릴 수 있는
일을 등록해 놓은면 그 일을 처리하는 동안 다른 동작 또는 꼭 필요한 동작을
못하여 화면이 멈춰 있는 것과 같은 모습을 보일 수 있습니다
그래서 안드로이드는 이러한 동작을 처리하기 위한 별도의 thread를 만들고 사용할 수
있게 되어 있습니다
이것이 AsyncTask 입니다
이것은 검색하시면 좋은 문서들이 많이 있기 때문에 따로 설명을 안드리겠습니다
도움이 되셨으면 좋겠네요
수고하세요