2016-04-28 6 views
1

Я разрабатываю приложение для отслеживания местоположения пользователя, когда они нажимают кнопку «Пуск». Я внедрил сервис для записи местоположения с помощью LocationListener, и он работает хорошо, но я провел какое-то тяжелое тестирование, и когда я открываю некоторые приложения, мое приложение и служба случайно убиваются андроидом.Android-приложение и его служба были убиты после открытия некоторых приложений

Но я загрузил приложение под названием Wikiloc и сделал тот же тяжелый тест, открыв несколько приложений. Это приложение никогда не убивается, и я вижу, что приложение создает уведомление, которое нельзя отменить. Может ли это быть связано с тем, что приложение никогда не убивается системой?

Как это может произойти в моем приложении? Должен ли я делать трюк с уведомлением? Если да, то как это реализовано?

+0

Вы пытаетесь использовать [липкий режим] (http://developer.android.com/intl/ru/reference/android/app/Service.html#START_STICKY) в вашем сервисе? – Alexander

+0

@Alexander да, мой onStartCommand выглядит так: '@Override public int onStartCommand (Intent intent, int flags, int startId) { Log.e (TAG," onStartCommand "); runningService = true; super.onStartCommand (намерение, флаги, startId); возвращение START_STICKY; } ' – xmarston

ответ

0

Взгляните на документацию для службы Android startForeground(int, Notification)here. В соответствии с документацией:

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

Вы вызываете startForeground в свой сервис onCreate.

+0

спасибо за это, сервис работает сейчас на переднем плане, и он не убивает Android, проводя некоторое тестирование, но моя активность перезагружается, как я это предотвращаю? – xmarston

+0

Я не думаю, что вы можете прекратить это из-за этого (не уверенно на 100%). Вы можете решить эту проблему, поместив любую информацию о состоянии в Службу (или во внутреннюю память), и когда действие будет перезапущено, вы можете получить данные из Сервиса для заполнения Activity. Это создаст впечатление, что Деяние никогда не было разрушено. – curob

+0

Как вы думаете, SharedPreferences может быть хорошим способом сохранить состояние службы? – xmarston