Как гугл говорит:
Обработчик позволяет отправлять и обрабатывать объекты Message и Runnable.
связанный с MessageQueue потока. Каждый экземпляр обработчика
связан с одним потоком и очередью сообщений этого потока. когда
вы создаете новый обработчик, он привязан к потоку / очереди сообщений
поток, который его создает - с этого момента он будет доставлять
сообщения и runnables в эту очередь сообщений и выполнять их, как они
выйти из очереди сообщений.
И я ожидаю, что когда я создаю обработчик в главном потоке (потоке пользовательского интерфейса), он присоединяется к этому потоку, поэтому он останавливает пользовательский интерфейс до завершения своей задачи. Но в тесте этого не происходит, и он действует так, как будто он находится на заднем плане и выполняет свою задачу параллельно.
Я использовал для создания дескриптора, как это:
Handler mainHandler = new Handler(Looper.getMainLooper());
Runnable runnable = new Runnable() {
@Override
public void run() {
for (int i = 0; i < 35000; i++) {
log.i(TAG,"log in Handler:"+i);
}}
};
mainHandler.post(runnable);
log.i(TAG,"log outSide");
В mainActivity (поэтому дескриптор должен быть привязан к основному потоку). Так в чем же проблема или я неправильно создал обработчик?
Некоторые друзья замечают, что doSomthing()
не достаточно сложен, но почему мы видим «log outSide» перед «log in Handler:», если они находятся в одном потоке.