Это потому, что согласно doc обработчика, задача выполняется в любом потоке, в котором создан обработчик.В данном случае это ваш поток пользовательского интерфейса.
Когда вы создаете новый обработчик, он привязывается к потоку / очереди сообщений создавшего его потока
Вам нужно использовать HandlerThread, где вы назначаетеОбработчик это собственный рабочий поток для операции.
Сделайте это вместо того, чтобы инициализировать ваш обработчик:
HandlerThread thread = new HandlerThread("newthread");
thread.start();
Handler handler = new Handler(thread.getLooper());
Кроме того, проверьте эту ссылку для получения дополнительной информации и рекомендаций по использованию HandlerThread.