Ошибка принудительного закрытия при получении текстового сообщения ПОСЛЕ закрытия приложения - PullRequest
0 голосов
/ 22 марта 2011

Есть приложение, которое выполняет ряд задач, когда телефон получает смс-сообщение, и все они работают нормально.Тем не менее, если я закрою / закрою приложение, я получу ошибку принудительного закрытия при получении смс-сообщения.

Похоже, что приложение все еще как-то работает / некоторые методы, такие как "onReceive", все еще кэшируются в памяти.Когда приложение закрывается, мне нужно убедиться, что оно правильно завершено и телефон не выдает ошибку принудительного закрытия.Кто-нибудь может посоветовать?

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

@Override
public void onDestroy() {

    super.onDestroy();

    System.runFinalizersOnExit(true);


    System.exit(0);
}//end onDestroy method

Ответы [ 3 ]

3 голосов
/ 22 марта 2011

Вы должны прочитать о том, как работает Android:

1 голос
/ 22 марта 2011

Кажется совершенно очевидным, что это FYPSpeakerActivity имеет нулевое значение там. Но, исходя из вашего описания, это, вероятно, никогда не должно называться.

Как вы регистрируетесь для текстовых сообщений? Если вы используете manifest.xml для определения получателей широковещательной рассылки для текстовых сообщений, то «Выход» из вашего приложения ничего не делает для их предотвращения. Если вы регистрируете широковещательный приемник программно, то в какой-то момент вам придется отменить регистрацию. «Выход» из приложения не отменяет регистрацию автоматически.

Кроме того, как и в других публикациях, вы должны прочитать о жизненном цикле приложения. System.exit () хмурится, runFinalizerOnExit устарела, и onDestroy не гарантированно запускается.

1 голос
/ 22 марта 2011

Попробуйте посмотреть системные журналы (adb logcat), там могут быть сообщения о незарегистрированных / пропущенных ресиверах или что-то подобное.

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

Почему вы делаете System.exit (0)? Также runFinalizersOnExit помечен как устаревший и небезопасный в документации.

Похоже, вам нужно сделать unregisterReceiver(BroadcastReceiver) в onStop или onDestroy метод в зависимости от ваших потребностей.

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