5

View オブジェクトからイベントを取得するにはどうすればよいですか? 実行中のスレッドは 1 つだけです: UI スレッド (独自のスレッドをまったく実装していない場合)。ボタンに onClickListener を実装しており、このボタンの機能が「キャンセル」であるとします。ボタンによって発生するイベント、つまり、UI が行っていることをキャンセルするには、中断する必要があります。それで、それですか?それらは割り込みのように機能しますか?

開発者サイトの API ガイドは美しい説明ですが、まだ全体像を示していません。http://developer.android.com/guide/topics/ui/ui-events.html

4

2 に答える 2

9

内部的に、Android は UI イベントを処理するためにイベント ループを実行しています。わかりやすい図については、このプレゼンテーションの 3 番目のスライドを参照してください。このスレッドは、システム コールを UI 要素にディスパッチするために使用されています。

システムは、コンポーネントのインスタンスごとに個別のスレッドを作成しません。同じプロセスで実行されるすべてのコンポーネントは UI スレッドでインスタンス化され、各コンポーネントへのシステム コールはそのスレッドからディスパッチされます。

(ソース:プロセスとスレッド)

Google I/O 2008のInside the Android Application Framework ビデオをご覧ください。イベント ループ (Looper と Message Queue で構成されます) についてのわかりやすい説明があります。興味深いのは、ビデオの 26 m あたりから始まります。

onClick()メソッドは、元のsetOnClickListener()が呼び出されたのと同じスレッドから呼び出されます。それがメイン/UI スレッドであった場合は、リスナーで長時間実行されるタスクを実行する必要があります。それらは UI スレッドをブロックし、アプリが応答しなくなる可能性があります。代わりにAsyncTaskなどのソリューションを使用してください。

詳細なチュートリアルについては、このブログ投稿をご覧ください。

于 2013-07-31T08:09:13.823 に答える