内部的に、Android は UI イベントを処理するためにイベント ループを実行しています。わかりやすい図については、このプレゼンテーションの 3 番目のスライドを参照してください。このスレッドは、システム コールを UI 要素にディスパッチするために使用されています。
システムは、コンポーネントのインスタンスごとに個別のスレッドを作成しません。同じプロセスで実行されるすべてのコンポーネントは UI スレッドでインスタンス化され、各コンポーネントへのシステム コールはそのスレッドからディスパッチされます。
(ソース:プロセスとスレッド)
Google I/O 2008のInside the Android Application Framework ビデオをご覧ください。イベント ループ (Looper と Message Queue で構成されます) についてのわかりやすい説明があります。興味深いのは、ビデオの 26 m あたりから始まります。
onClick()メソッドは、元のsetOnClickListener()が呼び出されたのと同じスレッドから呼び出されます。それがメイン/UI スレッドであった場合は、リスナーで長時間実行されるタスクを実行する必要があります。それらは UI スレッドをブロックし、アプリが応答しなくなる可能性があります。代わりにAsyncTaskなどのソリューションを使用してください。
詳細なチュートリアルについては、このブログ投稿をご覧ください。