Мне нужно понять о Looper. Looper будет консультироваться с обработчиком обработчиком для отправки и обработки Message и Runnable объектов, связанных с MessageQueue потока.Нужно ли нам использовать Looper.prepare() при вызове обработчика
По умолчанию в потоке нет связанного с ним цикла сообщений, следовательно, также нет Looper. Чтобы создать Looper для потока и посвятить этот поток для обработки сообщений последовательно из цикла сообщений, вы можете использовать класс Looper.
Ниже мой код, я не призываю Looper явно
Thread background2 = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
final int v =i;
try { Thread.sleep(1000);
handler.post(new Runnable() {
@Override
public void run() {
txt.setText(txt.getText() + "Thread 2 current i : " + String.valueOf(v) +System.getProperty("line.separator"));
}
});
} catch (Exception e) {
Log.v("Error", e.toString());
}
}
}
});
Означает ли это, что задача/работоспособной не ставится в очередь? какая разница в коде выше этой
Thread background3 = new Thread(new Runnable() {
@Override
public void run() {
Looper.prepare();
for (int i = 0; i < 5; i++) {
final int v =i;
try { Thread.sleep(1000);
handler.post(new Runnable() {
@Override
public void run() {
txt.setText(txt.getText()+ "Thread 3 set : " + String.valueOf(v) +System.getProperty("line.separator"));
}
});
} catch (Exception e) {
Log.v("Error", e.toString());
}
}
Looper.loop();
}
});
оба они доступа к же обработчик. Они оба отлично работают.
«Thread» не нуждается в 'Looper', чтобы отправлять сообщения другому' Thread' 'Handler', если это то, о чем вы просите. «Обработчик' в ваших примерах - для других 'Thread', в зависимости от 'Thread' вы их создаете. –
Здравствуйте, я запутался, так что в чем разница на моем втором примере, я вызываю Looper.prepare() явно, но без него все еще работает –
Создание 'Looper' для' Thread' означает, что _other_ 'Thread's может публиковать к нему. «Looper» в вашем примере на самом деле ничего не делает, поскольку вы ничего не размещаете в «Handler», созданный там, поэтому вы не видите разницы. –