2017-09-09 2 views
1

AndroidではすべてのアプリのデフォルトUIスレッドは1つで、すべてのイベントリスナーが手続き型実行に限定されていますか?UIスレッドは1つしかないので、すべてのイベントリスナーが手続きですか?

(たとえページに30個のボタンがあっても)画面をどのようにクリックしても、一度に1つのView.OnClickListenerを有効にすることはできますか?同時に2つのボタンをクリックしても?

+3

「手続き実行」とはどういう意味ですか?あなたは "シリアル実行"を意味しますか? "一度に1つのView.OnClickListenerを有効にすることは可能ですか?" - 正しい。 「2つのボタンを同時にクリックしても? - 正しい。このため、リスナーがすぐに戻ってくることは非常に重要です(サブミリ秒)ので、シングルスレッドUIの影響を最小限に抑えることができます。 – CommonsWare

+0

@CommonsWareありがとう、ちょうど答えのポストとして言ったことを置くことができたら、それを受け入れることができます。 – AlanSTACK

答えて

2

それは、一度にアクティブにするには、単一のView.OnClickListenerでのみ可能ですか?

正しい。

同時に2つのボタンをクリックしても、

正しい。このため、リスナーがすぐに戻ってくることは非常に重要です(サブミリ秒)ので、シングルスレッドUIの影響を最小限に抑えることができます。 —ディスクI/O、ネットワークI/O、長い計算など遅い可能性のある作業は、—のバックグラウンドスレッドに移動します。

0

はい、これはあなたのプログラムについての推論に非常に役立ちます。 UIスレッドで実行される他のメソッドは、現在のメソッドが終了するまで実行できないため、UIスレッドで呼び出されるメソッドの割り当て順序などのことを心配する必要はありません。たとえば、UIスレッドでAsyncTaskを開始した場合、現在のメソッドが返されるまでそのonPostExecuteは実行できません。ハンドラを使用してメインルーパに何かを投稿する場合は、コンポーネントのライフサイクルメソッドと同時に実行できないことがわかります。その他。

関連する問題