Xamarin forms происходит сбой приложения Android при срабатывании BroadcastReceiver во время Doze в OREO

У меня есть приложение для напоминаний, которое должно показывать напоминания вовремя, даже если телефон находится в режиме ожидания. Это оказалось нормальным при компиляции с использованием 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 для компиляции, но я не вижу ничего, что изменилось бы, что могло бы повлиять на это.

Что сообщается в logcat?

SushiHangover 13.09.2018 15:18

Я новичок в разработке Android и еще не делал этого на устройстве. Я расскажу, как это сделать, и вернусь к вам.

Nick Jones 13.09.2018 15:30

ОК - не понимал, что DeviceLog в Visual Studio показывает события, которые произошли, когда устройство не было подключено (тупой, я знаю).

Nick Jones 13.09.2018 15:58

Похоже, что проблема заключается в записи в базу данных журнала - предположительно потому, что у меня еще нет блокировки пробуждения! Вид эффекта наблюдателя. Я перестрою позже сегодня с этими операторами регистрации и сообщу, что происходит. Спасибо за вашу помощь

Nick Jones 13.09.2018 16:00

Н.П., опубликуйте обновления к вашему вопросу, если нужно, когда дойдете до него ...

SushiHangover 13.09.2018 16:04
0
5
207
1

Ответы 1

Отвечая на свой вопрос, если это поможет кому-то другому.

Исследование logcat показывает, что проблема заключалась в том, что приложение не было инициализировано при вызове широковещательного приемника.

logcat показал сообщение: android.runtime.JavaProxyThrowable: System.InvalidOperationException: вы ДОЛЖНЫ вызвать Xamarin.Forms.Init (); перед его использованием.

Похоже, что запланированное задание приводило к сбою приложения, поэтому, когда сработал сигнал тревоги, получатель не был инициализирован и не мог обработать сообщение.

Следующее расследование - причина сбоя запланированного задания ....

Другие вопросы по теме