Я создаю поток для обработки запроса. В потоке я должен вызвать Looper.prepare()
, который требуется для некоторых других функций, которые он использует, а затем я вызываю Looper.loop()
. Но когда соединение для запроса закрыто, я получаю обратный вызов в другом потоке. В этот момент мне нужно вызвать quit()
на лупере потока, чтобы l oop () возвратился и поток завершился. Тем не менее, мне трудно понять, как получить петлю потока. Я не вижу ничего в Thread
, чтобы получить Looper для потока. В классе Looper
я вижу способ получить петлитель для текущего класса, но я не могу передать эту информацию из внутреннего класса Thread в класс, который ее создает:
final Looper l1;
final Thread thread = new Thread() {
@Override
public void run() {
Looper.prepare();
l1 = Looper.myLooper(); // ERROR!
// initialization goes here
Looper.loop();
Log.d(logtag,"The request thread is done.");
}
};
thread.start();
и в обратном вызове, который следует сразу за вышеуказанной строкой:
webSocket.setClosedCallback(new CompletedCallback() {
@Override
public void onCompleted(Exception ex) {
// other code
l1.quit();
}
});
Я получаю ошибку времени компиляции в строке, отмеченной выше:
Cannot assign a value to final variable 'l1'.
Но я не назначил ее еще! Если я не сделаю Looper
финальным, я не смогу назначить его, потому что он не финальный.