Servicio de música matado incluso cuando startForground

¿Es posible impedir que Service (startForground) sea destruido por os? Lo utilizo para reproducir audio, pero se pierde cuando uso otra aplicación que requiere más recursos (las aves enojadas van) por un tiempo. En los registros, veo que el proceso de la aplicación está siendo eliminado por ActivityManager. Repetí eso también con algunas otras aplicaciones audio. Sólo la aplicación que no se ha eliminado es la aplicación de Play Música. Se replicó en samsung s3 android 4.3.

¿Es posible impedir que Service (startForground) sea destruido por os?

No. Es Android quien decide qué proceso tiene que ser detenido cuando. La única manera es hacer que sea "menos atractivo para ser detenido" al reducir la cantidad de memoria que consume.

Guardar memoria. Ponga el servicio en su propio proceso muy pequeño. Para que android os puede matar el proceso principal para recuperar la memoria y su servicio puede seguir funcionando. Mantenga un pequeño código de servicio pasando el ajuste y las preferencias con la intención utilizada para iniciar el servicio.

Nota: servicio minúsculo debe ser un servicio de primer plano, lo que significa que tiene que mostrar un icono en la barra de estado.

Manifiesto por proceso separado

<service android:name="com.gosylvester.bestrides.ServiceLocationRecorder" android:process=":bestRidesService" > </service> </application> 

Pase en los ajustes con la intención usada para comenzar el servicio. Simplemente reinicie el servicio para cambiar los ajustes.

 @Override public int onStartCommand(Intent intent, int flags, int startId) { boolean isTrackerMarker = SettingMarker.TRACKER_MARKER_DEFAULT; if (intent != null) { // intent is processing = b isMiles = intent.getBooleanExtra( SettingApplication.APPLICATION_MILE, SettingApplication.APPLICATION_MILE_DEFAULT); isRecordAccuracy = intent.getBooleanExtra( SettingRecord.RECORD_ACCURACY, SettingRecord.RECORD_ACCURACY_DEFAULT); locationInterval = intent.getLongExtra(SettingRecord.RECORD_MIlLIS, SettingRecord.RECORD_PRESET_MEDIUM_MILLIS); startMillis = intent.getLongExtra(BUNDLE_START_MILLIS, 0); distance = intent.getDoubleExtra( ServiceLocationRecorder.BUNDLE_TRACKED_DISTANCE, 0); recordDistance = (float) intent.getIntExtra( SettingRecord.RECORD_DISTANCE, SettingRecord.RECORD_PRESET_MEDIUM_DISTANCE); boolean newIsRecording = intent.getBooleanExtra( SettingRecord.RECORDING, isRecording); isTrackerMarker = intent.getBooleanExtra( SettingMarker.TRACKER_MARKER, SettingMarker.TRACKER_MARKER_DEFAULT); startRecording(newIsRecording); } 

¿Trató de solicitar el enfoque y la ganancia de control y perdido de él? Creo que esta administración de aplicaciones está lejos de nuestro control, pero al menos puedes hacer algo cuando esto suceda.

En algún momento de su ciclo de aplicaciones, pruebe algo como esto:

 audioManager.requestAudioFocus(new OnAudioFocusChangeListener() { @Override public void onAudioFocusChange(int focusChange) { switch (focusChange) { case AudioManager.AUDIOFOCUS_GAIN: // you have the focus, you can start or restarting playing break; case AudioManager.AUDIOFOCUS_LOSS: case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT: // you lost the focus, you should pause or stop playing break; case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK: // you lost the focus, but your app can continue playing in "duck" mode break; default: } } }, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); 

Echa un vistazo a la respuesta de Foreground servicio que está siendo asesinado por Android por Robin Davies, hay una gran cantidad de información:

Sólo para resumir, aquí es cómo se supone que las cosas funcionan. Los servicios corrientes serán rutinariamente limpiados y terminados cada 30 minutos más o menos. Los servicios que deseen permanecer vivos durante más tiempo deben llamar a Service.startForeground, que coloca una notificación en la barra de notificaciones para que los usuarios sepan que su servicio está en ejecución permanente y potencialmente la vida de la batería. Sólo 3 procesos de servicio pueden designarse como servicios de primer plano en un momento dado. Si hay más de tres servicios de primer plano, android nombrará al servicio más antiguo como candidato para la eliminación y terminación.

Así que tal vez hay más de 3 servicios de primer plano? También explica sobre posibles errores en la plataforma al priorizar los servicios de primer plano.

  • Vinculación de un servicio a un android.app.Activity vs Enlace a un android.app.Application
  • SurfaceView en servicio
  • Android: Servicio de Intención con bibliotecas de red (Retrofit o Volley)
  • Android: varios intentservices o un intentservice con múltiples intenciones?
  • Asynctask vs. Thread vs Services vs Loader
  • Android aidl no puede enlazar al servicio, cuando el host se instala después de que el cliente
  • ¿Dónde debería llamarse el servicio android y llamar a GoogleAPIClient mientras se utiliza el patrón MVP en android?
  • Descarga de datos y actualización de la interfaz de usuario
  • Android: IntentService no hace cola correctamente
  • Cómo ejecutar un servicio de arranque en Android 2.3 (Gingerbread) sin chocar
  • Inicio de un servicio en la plataforma android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.