HandlerThread
で以下のクラスを使用して更新ストリームを作成しようとしていますが、Javaで変数キャプチャがどのように機能するかについていくつか質問があります。Runnableで囲みスコープをキャプチャする方法
[1]ret
は参考として取り上げていますか?
[2]this
はRunnable
を参照していますか、それとも囲いの範囲から取り込まれていますか?
[ボーナス]StartStream
はハンドラスレッドにRunnable
を投稿し、そして唯一のRunnable
が完了したときに返す必要があります。下のコードは期待どおりに動作しますか?
public class Stream extends HandlerThread {
Handler handler = null;
Stream() {
super("Stream");
handler = new Handler(getLooper());
start();
}
private int _startStream() { // Start some repeating update
return 1;
}
public int StartStream() {
int ret = -1;
handler.post(new Runnable(){
@Override public void run() {
synchronized(this) {
ret = _startStream(); // [1]
this.notify(); // [2]
}
}
});
synchronized(this) {
while(ret == -1) {
try {
this.wait();
}
catch (InterruptedException e){}
}
}
return ret;
}
}
なぜあなたは 'HandlerThread'を拡張していますか? – pskink
@pskinkなぜですか? – bitwise
'HandlerThread'は直接使用するように設計されているため、 – pskink