1.Если телефон находится в спящем режиме, кроме входящего телефонного звонка, вы можете использовать намерение AlarmManager, чтобы разбудить телефон.
Из документации класса AlarmManager :
Диспетчер аварийных сигналов удерживает блокировку пробуждения ЦП , пока выполняется метод onReceive () приемника аварийных сигналов.Это гарантирует, что телефон не будет спать, пока вы не закончили обработку трансляции.Как только onReceive () возвращается, диспетчер тревог снимает эту пробужденную блокировку.Это означает, что телефон в некоторых случаях будет спать, как только ваш метод onReceive () завершится.Если ваш приемник тревоги называется Context.startService (), возможно, что телефон будет находиться в спящем режиме до запуска запрошенной службы.Чтобы предотвратить это, вашему BroadcastReceiver и службе потребуется реализовать отдельную политику блокировки пробуждения, чтобы телефон продолжал работать до тех пор, пока служба не станет доступной.
2.Если вы работаете с AsyncTask , вы захотите опубликовать результаты в потоке пользовательского интерфейса на onPostExecute()
Из документации AsyncTask :
AsyncTask позволяет правильно и легко использовать поток пользовательского интерфейса.Этот класс позволяет выполнять фоновые операции и публиковать результаты в потоке пользовательского интерфейса без необходимости манипулировать потоками и / или обработчиками.
3. Я предлагаю вам прочитать на официальномдокументация Power Manager , которая дает хорошее представление о концепции WakeLock.