2011-06-21 2 views
1

スレッドを拡張し、run()メソッドをオーバーライドする新しいクラスを提供することによってスレッドを実装することは、私はそれを働かせるために終日試みました。私のコードは次のとおりです:スレッドを拡張し、run()メソッドをオーバーライドする新しいクラスを提供することによってスレッドを実装します。

/* 
* see http://developer.android.com/reference/java/lang/Thread.html 
*/ 
class threadClass extends Thread { 
    private Handler mHandler; 
    private Message mMsg; 
    // constructor 
    public threadClass(Handler handler, Message msg) { 
     // do something like save the Handler reference 
     mHandler = handler; 
     mMsg = msg; 
    } 
    @Override 
    public void run() { 
     // do some background processing, call the Handler? 
     mHandler.sendMessage(mMsg); 
    } 
} 
public Thread passHandlerToThread(Handler handler) { 
    handler.sendEmptyMessage(10); 
    Message msg = Message.obtain(); 
    msg.what = 10; 
    Thread thread = new threadClass(handler, msg); 
    return thread; 
} 
private Handler localHandler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     int what = msg.what; 
     if (what == 10) Log.i("localHandler", "what: " + what); 
    } 
}; 
public void startThread() { 
    Thread thread = passHandlerToThread(localHandler); 
    thread.start(); 
} 

LocalService onCreate()でstartThread()を呼び出しますが、何も起こりません。私は間違って何をしていますか?私はlocalHandler()がpassHandlerToThread()とrun()の2度呼ばれることを期待していました。

答えて

1

このような何か:私にあなたの答えは、2つの[スレッド](http://developer.android.com/reference/java/lang/Thread.html)に記載似ていない

private final Handler handler = new Handler(); 
// toast runnables 
final Runnable updateTwitterNotification = new Runnable() { 
    @Override 
    public void run() { 
     dismissProgressSpinner(); 
     Toast.makeText(getBaseContext(), "Tweet sent!", Toast.LENGTH_LONG).show(); 
    } 
}; 

final Runnable updateCreateError = new Runnable() { 
    @Override 
    public void run() { 
     Toast.makeText(getBaseContext(), "Tweet error!", Toast.LENGTH_LONG).show(); 
    } 
}; 

postMessageInThread(); 


//implementation: 
private void postMessageInThread() { 
    Thread t = new Thread() { 
     @Override 
     public void run() { 

      try { 
       connectToTwitterService() // or whatever 
       handler.post(updateTwitterNotification); 
      } catch (Exception ex) { 
       Log.e(TAG, "Error sending msg", ex); 
       handler.post(updateCreateError); 
      } 
     } 
    }; 
    t.start(); 
} 
+0

を。しかし、ちょっと、3番目のアプローチがいいですね。だから私はあなたの答えを受け入れ、それを投票するでしょう。私の質問が好きかどうか尋ねることはできますか? – Marie

+0

私はあなたの質問が好きです - そうです、私はそれを投票します。 :)。面白い、これは私のスレッドの大半を処理する方法です - 多分私は文書を見て行くでしょう... –

+0

おっと、ドキュメントをチェックしました - 私はあなたが混乱していた理由を見ます - 私は@Overrideフラグを逃しました - 私は今それを追加しました。 –

関連する問題