Сбой службы при «смерти» Деятельности - PullRequest
3 голосов
/ 03 июля 2011

У меня есть действие, которое запускает службу.

В моей активности:

startService(new Intent(this, MyService.class));

В моей службе onStart ():

/* Show notification */
int icon = R.drawable.icon;
tickerText = getResources().getString(R.string.app_name);
long when = System.currentTimeMillis();
contentTitle = getResources().getString(R.string.app_name);
contentText = getResources().getString(R.string.running);

Intent notificationIntent = new Intent(this, activityClass).setAction(Intent.ACTION_MAIN).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification = new Notification(icon, tickerText, when);
notification.setLatestEventInfo(this, contentTitle, contentText, contentIntent);

notification.flags = Notification.FLAG_ONGOING_EVENT;

((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).notify(0, notification);

startForeground(0, notification);

Службаимеет таймер, который выполняет некоторую работу каждые 3-4 минуты, и, если возможно, передает информацию в активность.Когда действие закрыто, служба должна продолжать выполнять свою работу.

Когда я запускаю приложение и возвращаюсь на домашний экран, служба продолжает работать.Но через некоторое время я получаю эти сообщения logcat, и служба останавливается:

07-03 16: 55: 09.440: INFO / ActivityManager (583): процесс com.myapp (pid 11665) умер,07-03 16: 55: 09.440: WARN / ActivityManager (583): планирование перезапуска аварийного сервиса com.myapp / .MyService через 5000 мс

Как я могу предотвратить это?

Ответы [ 3 ]

7 голосов
/ 19 августа 2012

Предоставленные ответы мне не помогли.Но я нашел очень простой способ сделать это, добавив в Манифест

    <service android:name="..." android:process=":remote" />

http://developer.android.com/guide/topics/manifest/service-element.html

Просто в данный момент тестирование, моя активность уже уничтожена, но мой сервис работает.

2 голосов
/ 03 июля 2011

Когда я запускаю приложение и возвращаюсь на домашний экран, Служба продолжает работать.Но через некоторое время я получаю эти сообщения logcat, и служба останавливается ... Как я могу предотвратить это?

Вы вообще не знаете.

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

В вашем случае, пожалуйста, переключитесьиспользовать AlarmManager, возможно, в сочетании с IntentService, поэтому служба отключается сама по себе, когда больше не нужно ничего делать.

1 голос
/ 03 июля 2011

Вы захотите, чтобы ваша служба работала как Remote Service, чтобы она работала в своем собственном процессе.

Блог об удаленных службах: http://saigeethamn.blogspot.com/2009/09/android-developer-tutorial-part-9.html

AnПример примера: http://about -android.blogspot.com / 2010/02 / android-remote-service-sample.html

...