2011-07-24 15 views
4

私はこの本を通じて学んでいますし、それは私にこの例を示します:Runnableオブジェクトをハンドラに渡すにはどうすればよいですか?

Handler handler=new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     bar.incrementProgressBy(5); 
    } 
}; 

素晴らしいうまくいく
Thread background=new Thread(new Runnable() { 
    public void run() { 
     try { 
      for (int i=0;i<20 && isRunning.get();i++) { 
       Thread.sleep(500); 
       handler.sendMessage(handler.obtainMessage()); 
      } 
     } catch (Throwable t) { 
      // just end the background thread 
     } 
    } 
}); 

。しかし、さらに下の本の中でそれは言う:

あなたではなく、メッセージオブジェクトと大騒ぎはない場合、あなたはまた、アクティビティUIスレッド上で、それらのRunnable オブジェクトを実行するハンドラに のRunnableオブジェクトを渡すことができます。 ...任意のビュー(つまり、任意のウィジェットまたはコンテナ)に同じメソッド を使用できます。これにより、コードが に少し簡略化され、Handlerオブジェクトをスキップできます。

しかし、Runnableオブジェクトでこれを行う方法の例はありません。誰かが例を持っていますか? Handler用アンドロイドドキュメントあたりとして

答えて

4

このような何か:

Handler h = new Handler(); 

Thread background=new Thread(new Runnable() { 
      public void run() { 
      try { 
       for (int i=0;i<20 && isRunning.get();i++) { 
       Thread.sleep(500); 
       handler.post(new Runnable() { 
        public void run() { 
        bar.incrementProgressBy(5); 
        } 
       }); 
       } 
      } 
      catch (Throwable t) { 
       // just end the background thread 
      } 
      } 
     }); 
+0

コードは小さいです...しかし、今は2つのrun()メソッドがありますか? – Ryan

+0

回答ありがとうございました。回答を選択しました – Ryan

+0

あなたは今、2つのランナブルを持っています。したがって、2つのrun()メソッドがあります。それほど多くはできません...(しかし、いくつかのコード構造によって、少し上手く見えるようになります) –

2

パブリック最終ブールポスト(RunnableをR)ので

:レベル1が実行可能R原因APIはメッセージ キューに追加されます。実行可能ファイルは、このハンドラが接続されているスレッドで実行されます。 パラメータ

r - 実行されるRunnable。戻り値

Runnableがメッセージ キューに正常に配置された場合はtrueを返します。通常、ルーパー処理の メッセージキューが終了しているため、失敗するとfalseを返します。

+0

定義を見つけるには、Googleやドキュメントの検索を経由して、かなり簡単です。しかし私のようなノブのために、それらの定義はストリング理論やロケット科学を説明することができました。なぜ私は誰かが例を挙げることができるかどうか尋ねていたのですか?コードを見て、それを定義に合わせて理解した方が簡単です。 – Ryan

関連する問題