Приложение xamarin форм Android перестает работать при запуске BroadcastReceiver во время Doze в OREO - PullRequest
0 голосов
/ 13 сентября 2018

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

Кто-нибудь может посоветовать, почему и где это может не сработать, или как мне лучше отладить его? Это похоже на изменение после перемещения 8.1 SDK для компиляции, но я не вижу ничего, что изменило бы, что повлияет на это.

1 Ответ

0 голосов
/ 17 сентября 2018

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

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

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

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

Следующее исследование объясняет, почемузапланированное задание не удалось ....

...