Android Broadcast Receiver и Force Close (неисследованные исключения) - PullRequest
0 голосов
/ 17 февраля 2011

У меня есть мульти-приложение «Активность» с кнопкой выхода / выхода из системы на большинстве экранов.

При нажатии кнопки отображается диалоговое окно подтверждения, а затем отправляется широковещательная рассылка.

У меня есть широковещательный получатель для каждого из действий, который просто вызывает действие finish (), и в OnDestroy я отменяю регистрацию получателя.Код хорошо работает при обычном использовании.

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

После того, как я нажму OK, появится последнее действие.Когда я нажимаю кнопку Quit / LogOut, вещание, кажется, не перехватывается другими действиями.

Мне обычно приходится выходить из каждого занятия или, в некоторых случаях, во второй раз, когда я нажимаю кнопку «Выйти», через которую распространяется трансляция.

Я знаю, что могу установить Thread.setDefaultUncaughtExceptionHandler (), но,

Есть ли что-то, чего я здесь не хватает?

Logcat ничего не показывает.

1 Ответ

2 голосов
/ 17 февраля 2011

У меня есть широковещательный получатель для каждого из действий, который просто вызывает действие finish (), и в OnDestroy я отменяю регистрацию получателя.Код хорошо работает при обычном использовании.

Нет, это не так.

Ваш подход предполагает, что все действия находятся в памяти.Это не гарантируется.Они могут быть частью задачи, но не в оперативной памяти, а их состояние сохраняется через onSaveInstanceState().В результате они не получат вашу рассылку.

Когда пользователь выбирает пункт меню «Выход» или запись в строке действий, вы должны очистить свои учетные данные для аутентификации (предположительно хранящиеся в статическом элементе данных или в пользовательском * 1010).* object), затем запустите любое действие, позволяющее пользователю войти в систему. В onResume() все ваши действия должны проверить, есть ли у вас действительные учетные данные для аутентификации - если нет, то запустите любое действие, позволяющее пользователю войти в систему..

Помимо прочего, это устраняет вещание, которое вызывает у вас трудности.

Я знаю, что могу установить Thread.setDefaultUncaughtExceptionHandler (), но,

Вы должны были сделать это до того, как написали свое первое занятие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...