2

私の考えが基本について正しいかどうか知りたいので、この質問を投稿します。

明確にする必要があるのは、UIスレッドにが含まれていることです。これは、メッセージ/実行可能ファイルを処理のためにキューから取得するために MessageQueue関連付けられています。Looper

さらに、はHandlerメッセージ/ランナブルをに送信します。Looperこれにより、オブジェクトがに統合されますMessageQueue

正しくない場合、MessageQueueはスタックでありLooper、着信オブジェクトと発信オブジェクトの管理者です。

これは私の次の質問につながります。メッセージオブジェクトがUIスレッドによって処理される場合、グローバルメッセージプールにリサイクルされます。しかし、これに関する明確な文書はありません。このメッセージプールに特定のサイズはありますか?メッセージを送信/取得する場合、拡張/縮小できますか?

これが本当なら、多くのメッセージを取得することによってプールが枯渇する可能性があります。そして、私はこれを信じることができません。特定の期間にリサイクルのためにメッセージを返送せずに、いくつかのメッセージを取得する必要がある状況を考えてみてください。

わかりやすくするために編集しました。

4

1 に答える 1

3

フレームワーク内のHandlerMessageのソース コードを見て、これがどのように機能するかの詳細を確認できます。

つまり、プールは、メソッドによって埋められるMessageオブジェクト (最大) のリンクされたリストです。メソッドは、再利用できる利用可能なプールを最初にチェックし、利用可能なプールがない場合は新しいプールを割り当てるだけです。MAX_POOL_SIZErecycle()obtain()Message

于 2012-09-17T13:45:57.313 に答える