Я пытаюсь сделать поток обновлений на 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