В Android у Нити может быть один Looper или MessageQueue. Обработчик используется для отправки сообщения или сообщения 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 - это просто служебный метод Activity, который используется, когда вы хотите выполнить некоторый код в потоке пользовательского интерфейса. Логика, лежащая в основе этого метода, заключается в том, что если текущий поток является потоком пользовательского интерфейса, то выполните его немедленно, в противном случае используется Handler для отправки сообщения в MessageQueue потока пользовательского интерфейса (например, метод 1).