В Android поток может иметь один Looper или MessageQueue. Обработчик используется для отправки Message или публикации Runnable в MessageQueue потока, и он всегда должен быть связан с Looper или MessageQueue потока.
Способ 1
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
// Code here will run in UI thread
}
});
При открытии приложения Android создает новый поток (называемый основным потоком или потоком пользовательского интерфейса) с Looper и MessageQueue, этот поток используется для визуализации пользовательского интерфейса и обработки входных событий от пользователей.
Приведенный выше код создает обработчик и связан с Looper потока пользовательского интерфейса, поэтому исполняемый объект будет поставлен в очередь в MessageQueue потока пользовательского интерфейса и будет выполнен позже.
Метод 2
new Handler().post(new Runnable() {
@Override
public void run() {
// Code here will run in UI thread
}
});
Создание обработчика и связывание с Looper текущего потока возможно в 3 случаях:
- Если этот код выполняется в потоке пользовательского интерфейса, то исполняемый объект будет поставлен в очередь в MessageQueue потока пользовательского интерфейса и будет выполнен позже.
- Если этот код выполняется в фоновом потоке, если в этом потоке есть Looper, тогда исполняемый объект будет помещен в очередь MessageQueue фонового потока и будет выполнен позже.
- Если этот код выполняется в фоновом потоке и в этом потоке нет Looper, то будет выдано исключение.
Способ 3
runOnUiThread(new Runnable() {
@Override
public void run() {
// Code here will run in UI thread
}
});
runOnUiThread – это просто служебный метод Активность используется, когда вы хотите выполнить некоторый код в потоке пользовательского интерфейса. Логика этого метода заключается в том, что если текущий поток является потоком пользовательского интерфейса, то он выполняется немедленно, в противном случае используется обработчик для отправки сообщения в MessageQueue потока пользовательского интерфейса (например, метод 1).
person
Son Truong
schedule
02.10.2019