У меня есть приложение для напоминаний, которое должно показывать напоминания вовремя, даже если телефон находится в режиме ожидания. Это оказалось нормальным при компиляции с использованием Android 7.1 SDK. Мой BroadcastReceiver получает WAKE_LOCK при запуске и освобождает его в предложении finally. Он также регистрирует активность в локальной базе данных SQLLite (для отладки). Теперь я перешел на компиляцию с Android 8.1 SDK, и все еще работает нормально когда телефон не находится в режиме ожидания. Однако, когда телефон переходит в режим дремоты, приложение вылетает в момент срабатывания будильника. Моя инструкция ведения журнала, которая является первой строкой в OnReceive, не вызывается. У меня есть ловушки для неперехваченных исключений, которые отправляют отчет в AppCenter и записывают локально. Они работают для других исключений.
TaskScheduler.UnobservedTaskException += ReportUnobservedTaskException;
AppDomain.CurrentDomain.UnhandledException += ReportUnhandledException;
AndroidEnvironment.UnhandledExceptionRaiser += ReportThrowableEvent;
Может ли кто-нибудь посоветовать, почему и где это может дать сбой, или как я могу лучше его отладить? Это похоже на изменение с момента переноса SDK 8.1 для компиляции, но я не вижу ничего, что изменилось бы, что могло бы повлиять на это.
Я новичок в разработке Android и еще не делал этого на устройстве. Я расскажу, как это сделать, и вернусь к вам.
ОК - не понимал, что DeviceLog в Visual Studio показывает события, которые произошли, когда устройство не было подключено (тупой, я знаю).
Похоже, что проблема заключается в записи в базу данных журнала - предположительно потому, что у меня еще нет блокировки пробуждения! Вид эффекта наблюдателя. Я перестрою позже сегодня с этими операторами регистрации и сообщу, что происходит. Спасибо за вашу помощь
Н.П., опубликуйте обновления к вашему вопросу, если нужно, когда дойдете до него ...
Отвечая на свой вопрос, если это поможет кому-то другому.
Исследование logcat показывает, что проблема заключалась в том, что приложение не было инициализировано при вызове широковещательного приемника.
logcat показал сообщение: android.runtime.JavaProxyThrowable: System.InvalidOperationException: вы ДОЛЖНЫ вызвать Xamarin.Forms.Init (); перед его использованием.
Похоже, что запланированное задание приводило к сбою приложения, поэтому, когда сработал сигнал тревоги, получатель не был инициализирован и не мог обработать сообщение.
Следующее расследование - причина сбоя запланированного задания ....
Что сообщается в
logcat
?