2016-04-28 17 views
0

スレッドの処理中にルーパーとwhileループの違いは何ですか? 私はこのコードを試してみました、それは私がルーパーとハンドラを使用と同じように動作します:スレッド処理中のルーパとwhileループの違いは何ですか?

public abstract class han { 
public abstract void handleMessage(Message message); 
public void sendMessage(Message message) 
{ 
    handleMessage(message); 
} 
} 

、その後:

   while (0 == 0) { 
       h = new han() { 
        @Override 
        public void handleMessage(Message message) { 
         Toast.makeText(thr.this, "mm", Toast.LENGTH_SHORT).show(); 
        } 
       }; 

実際には、「漢」ハンドラのようなクラスですが、理由はハンドラのエラールーパーなしで、私は "ハン"と呼ばれる特別なクラスを作った。 "h"はグローバル変数です

+1

あなたはたくさんのインスタンスを作ろうとしていますか? –

+0

あなたの答えは次の答えの下にあります –

+0

アンドロイドのルーパーの仕事は、メッセージキューからメッセージを取り出して、メッセージが正しいハンドラで処理されていることを確認しています。メッセージキューにメッセージがない場合は、受信メッセージをブロックして待機します。便利なルーパークラスは** android.os.Looper **にあります。 **一方、ループ**の間は、インテリジェントなハンドラとスレッドで実行すると判断できない場合があります。 – Sanny

答えて

0

要するに、looperはスレッドで実行される便利なクラスです。 ドキュメントから:http://developer.android.com/reference/android/os/Looper.html

"スレッドのメッセージループを実行するために使用されるクラス"だから、ルーパーはあなたにメッセージを送ることができるということです。私はおそらく、おそらく、私はそれがメッセージを受信するまでリソースを使い果たしているとは思わない、おそらく、ルーパー内のスマートな同期/待機の組み合わせによって。

あなたのwhileループは無期限に実行され、非常に頻繁に新しいhanオブジェクトを作成します。これらのオブジェクトを収集するには、ガベージコレクタを実行する必要があります。しかし、はい、あなたのコードはうまくいくはずですが、メッセージを受け取ることができるはずですが、リソースの大きなコストです。 (あなたがwhileループで動かないと、スレッドは終了し、何も起こらないでしょう、これはルーパーが防げるものです)

+0

OKですが、hanから抽象ラベルを削除できますが(handleMessageをオーバーライドします)、インスタンスを定義できますループの前に、そしてループの下でメッセージを処理してください。 –

+0

本文はありませんか? –

関連する問題