2012-04-11 8 views
1

Я использую BroadcastReceiver для приема SMS-сообщений с моим приложением, а затем редактируйте базу данных на основе того, что говорится в сообщении. Приложение работает нормально, когда оно открыто, но если я оставлю его в течение длительного периода времени и автоматически закрывает приложение, оно будет закрываться, когда оно получит сообщение (я думаю, что BroadcastReciever все еще работает, но в остальной части приложения закрыто). Есть ли способ закрыть приложение или возобновить его при получении текстового сообщения?Остановить приложение для Android от закрытия

Благодаря

ответ

1

Если вы хотите, чтобы приемник быть стойким, вы должны рассмотреть возможность использования Service вместо стандартного Activity для вашего приложения. BroadcastReceiver s, которые существуют в стандартном действии, считаются передним планом только при обработке onReceive, как только выполнение возвращает Activity, возобновляет свой обычный приоритет процесса и может быть завершен системой по мере необходимости.

От: BroadcastReceiver

Процесс Жизненный цикл

Процесс, который в настоящее время выполнения BroadcastReceiver (то есть, в настоящее время работает код в его OnReceive (контекст, Намерение) метод) считается быть начальным процессом и будет работать системой, за исключением случаев экстремального давления в памяти.

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

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

Для получения дополнительной информации о создании службы:

Разработчика Руководство
Для детального обсуждения о том, как создавать сервисы, читать Services developer guide.

+0

Чтобы преобразовать его в службу, мне просто нужно изменить «действие» на «службу» в XML-файле? –

+0

@TrentWalls Нет, я обновил свой ответ со ссылкой на странице «Службы» документации для Android, содержащей некоторую информацию и руководства по созданию службы. Следует отметить, что Служба и деятельность представляют собой принципиально разные единицы функциональности. –