Я работаю над своим первым приложением для Android, и у меня возникают проблемы с использованием AlarmManager. Мое приложение планирует тревогу, чтобы проверить несколько URL-адресов для данных. Ну, иногда, когда срабатывает будильник, я получаю ошибку «ANR» в logcat (которая, как я полагаю, означает, что приложение не отвечает, в диалоговом окне, которое я получаю на своем телефоне). Ошибка показывает каждый процесс, запущенный на телефоне с некоторой статистикой, после следующих записей журнала:
07-30 14:11:07.442: WARN/ActivityManager(2735): Timeout of broadcast BroadcastRecord{48d749d8 null} - receiver=android.os.BinderProxy@49088bc0
07-30 14:11:07.442: WARN/ActivityManager(2735): Receiver during timeout: ResolveInfo{48d74950 com.shaddow.courseChecker.CourseAlarm p=0 o=0 m=0x0}
07-30 14:11:07.477: INFO/Process(2735): Sending signal. PID: 25006 SIG: 3
07-30 14:11:07.477: INFO/dalvikvm(25006): threadid=3: reacting to signal 3
07-30 14:11:07.567: INFO/dalvikvm(25006): Wrote stack traces to '/data/anr/traces.txt'
Затем следует еще множество SIG 3 для каждого процесса, а затем:
07-30 14:11:08.118: ERROR/ActivityManager(2735): ANR in com.shaddow.courseChecker
07-30 14:11:08.118: ERROR/ActivityManager(2735): Reason: Broadcast of Intent { flg=0x4 cmp=com.shaddow.courseChecker/.CourseAlarm (has extras) }
07-30 14:11:08.118: ERROR/ActivityManager(2735): Load: 0.65 / 2.76 / 2.49
07-30 14:11:08.118: ERROR/ActivityManager(2735): CPU usage from 420741ms to 26ms ago:
Я бы предположил, что это вызвано тем, что код застрял при загрузке html-страницы слишком долго? После того, как все это произойдет, мой onReceive () завершает выполнение нормально.
Что касается исправления ... Должен ли я запускать свой код в отдельном потоке в onReceive (), чтобы он не отправлял ANR пользователю? Если я это сделаю, это позволит телефону спать, прежде чем он будет выполнен? Или мне следует запустить службу с частичной блокировкой пробуждения?