Activity마다의 메인스레드라기 보다는 프로세스자체에 Looper라는것이 존재하는데
Handler로부터 받은 Message를 수행해주는것이 Looper이고 Handler는 Looper에게 Message를 전달하기 위한 수단입니다.
Looper의 static 함수로 getMainLooper가 존재하는것을 보면 Activity마다 다른 Looper를 갖는것이 아닌 1개의 메세지큐 형식인 것은 분명한것 같습니다.
AsyncTask도 내부적으로 Handler를 갖기 때문에 특정 Message를 Looper로 보내고 그 Looper에서 Message를 수행하는 시점이 onPreExecute함수가 실행되는 시점이 되는것이겠죠?
Handler Thread 개념에 대해서 구체적으로 공부해보고 싶으신거 같으신데
https://realm.io/kr/news/android-thread-looper-handler/ 여기 링크 들어가 보시면 자세하게 설명이 나와 있으니 참고해보세요~