android service crash

android - El servicio se bloquea en ''muerte'' de la actividad



service crash (3)

Cuando ejecuto la aplicación y vuelvo a la pantalla de inicio, el servicio sigue en funcionamiento. Pero después de un tiempo recibo estos mensajes de logcat, y el servicio se detiene ... ¿Cómo puedo evitar esto?

No lo haces, hablando en general.

Los servicios no están diseñados para ejecutarse para siempre. Demasiados desarrolladores han comenzado servicios y nunca los han detenido. Y, en su caso, lo hacen sin una buena razón. Tener un servicio en la memoria solo mirando el reloj es un desperdicio, y es particularmente porque los desarrolladores hacen cosas como esta que Android "bloquea" los servicios después de que permanecen demasiado tiempo.

En su caso, cambie para usar AlarmManager , probablemente junto con un servicio de IntentService , por lo que el servicio se cierra por sí solo cuando ya no queda trabajo por hacer.

Tengo una actividad que inicia un servicio.

En mi actividad:

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

En mi servicio, 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);

El servicio tiene un temporizador que funciona un poco cada 3-4 minutos, y difunde información a la Actividad si es posible. Cuando se cierra la Actividad, el Servicio debe seguir haciendo su trabajo.

Cuando ejecuto la aplicación y vuelvo a la pantalla de inicio, el servicio sigue en funcionamiento. Pero después de un tiempo recibo estos mensajes de logcat y el servicio se detiene:

07-03 16: 55: 09.440: INFO / ActivityManager (583): Process com.myapp (pid 11665) ha muerto. 07-03 16: 55: 09.440: WARN / ActivityManager (583): Programación del reinicio del servicio bloqueado com.myapp / .MyService en 5000ms

¿Cómo puedo prevenir esto?