Я предлагаю перенести вашу логику из обычного потока в AsyncTask. Всякий раз, когда вам приходится выполнять тяжелую работу, а также взаимодействовать с пользовательским интерфейсом, AsyncTask - это лучшая практика.
В методе preExecute () вы показываете диалоговое окно или обновляете пользовательский интерфейс, в doInBackground вы делаете все, что вам нужно, а в onPostExecute вы закрываете диалоговое окно или обновляете пользовательский интерфейс.
Здесь документ AsyncTask .
Кроме того, если вам нужно показать ход работы, которую вы выполняете в фоновом режиме, это очень просто благодаря методам publishProgress / onProgressUpdate.