Вам нужно знать одну важную вещь - по умолчанию все, что вы делаете без запуска отдельного потока, выполняется в «основном» потоке (также известном как UI-поток).
Если вы делаете что-то, что может блокировать - ваш пользовательский интерфейс будет зависать, и пользователи будут страдать.
Если вы делаете что-то, что связано не с пользовательским интерфейсом, а с запросом к базе данных, сетевым вызовом или потенциально длинной блокирующей операцией - вам нужно запустить поток напрямую или использовать AsyncTask.
Также вы должны заметить, что если вы попытаетесь что-то сделать с пользовательским интерфейсом (например, установить значение для TextView) из неосновного потока, у вас ничего не получится. Пользовательский интерфейс может быть доступен только из UI-Thread.