2017-12-06 3 views
2

私はルーパーを理解しようとしています...ルーパーやスレッド中に?

今度は(今まで)while(真)状態を使っていたので、ちょっと混乱しました。無限ループ。

Looperまたはwhile(true)条件を使用する方が良いかどうかを知りたいだけです。

私はインターネットで私の質問に対する可能な答えを探しました。私はLooperとwhile(true)を一緒に使うコードを見つけることにかなり失望しました。

おそらく、私はルーパーを使用する点を得ていませんでしたが、私たちはここで学ぶためにここにいるのです...そうではありませんか?

+0

私はここ数日前にマルチスレッドを探していましたが、この回答とこの講演を読んでいました。 回答 - https://stackoverflow.com/a/29655572/2104990 講演 - https://www.youtube.com/watch?v=aV2XfWwpiDU&index=8&list=PLZ9NgFYEMxp50tvT8806xllaCbd31DpDy ドキュメンテーション - https://developer.android.com /topic/performance/threads.html これは確かにこのインスタンスでは難しい作業ですが、それらはあなたを助けてくれるでしょう –

+0

これらのドキュメントでは、ハンドラスレッドasynctaskとhandlerthreadの違いについて説明しています。多分私は私の質問の目的を伝えることができませんでした。私は、Looperクラスを使用する方がThreadクラスのrunメソッド内でwhile(true)条件を使用するよりも優れているかどうかを理解したかった...インターネット(https://blog.mindorks.com/android-core- looper-handler-and-handlerthread-bd54d69fe91a)私はLooperを使ってランナブルをキューに入れることができます。 while(true)条件を使用するよりも優れていますか?はいの場合、なぜですか?私たちはそれらを組み合わせて使用​​しなければなりませんか?はいの場合、なぜですか? –

+1

[Looperの目的は何ですか?使用方法は?](https://stackoverflow.com/questions/7597742/what-is-the-purpose-of-looper-and-how-to-use -it) –

答えて

2

Looperは、Handlerを介して送信されるプロセスMessagesにスレッドを開いたままにするメカニズムです。その意味では、スレッドは永遠に開いたままであるという点でwhile(true)に似ています(この場合は、明示的に閉じるように指示するまで)。ただし、while(true)とは異なり、別のスレッドからメッセージを送信できます。 Handlerを作成するたびに、作成されたLooperスレッドにバインドされます。その後、そのメッセージを投稿するたびに、そのメッセージが作成されたスレッドで処理されます。

Androidでよく知られているLooperスレッドがメインのUIスレッドです。このスレッドは常に実行中です。それはそれに投稿されたコードを実行します。最も一般的な描画操作ですが、ビューを呼び出してView#postに電話すると、次の描画サイクルでコードが実行されます。これは、すべてのViewオブジェクトがメインのUIルーパースレッドで構築されたHandlerを持っているためです。

UIルーパは実際にはLooper.getMainLooper()メソッドを参照することができ、Handlerを作成して、このスレッドにメッセージを投稿することができます。new Handler(Looper.getMainLooper());

必要に応じて、独自のLooperスレッドを作成して、UIスレッドへの並列スレッドとして機能させることもできます。描画操作はできませんが、他の操作のためのワーカースレッドとして使用できます。そうすれば、集中的に何かをする必要があるたびに、新しいスレッドを作成するオーバーヘッドはありません。

+0

これは私が探していた答えです、ありがとう@DeeV。 Looperを使用している間(真)に合っている場合(少なくとも1つ)があるかどうかを言うことができますか? –

+2

@AndreaZeddaいいえ、両方を使う必要はありません。ルーパーはより強力ですので、while(真)に比べて使用することをお勧めします。 – DeeV

+1

@AndreaZeddaルーパーは、あなたが 'while(true)'でやることをうまく構成したものです。 – payloc

1

Looperまたはwhile(true)条件を使用する方が良いかどうかを知りたいだけです。あなたには、いくつかの非常に具体的な低レベルの制御を必要としない限り、

私は、はフレームワークがある方枠組みによって提供されているAPIを使用して、一般的なルールとして、言うだろう。

彼らは通常、そのようなように、メッセージング、タスクの削除、などそれ以外のあなたがそれらを自分で実装していた多くの側面の世話をする

...

私はwhile (true)ループであなたには、いくつかを達成しようとしていることを推測定期的なタスクの繰り返し。

は、この特定のケースでは、はい、UIスレッドがブロックされていないので、Looper、独自にHandlerを使用し、postDelay(Runnable, long)と定期的にあなたのRunnableインスタンスを投稿してください。

@DeeVの答えは、すでに説明したコンポーネントについてよく理解していますが、必要なものはすべてAndroidのドキュメントで確認できます。

関連する問題