He comenzado un servicio en mi nueva aplicación. El servicio está en primer plano, con una Notificación. Cuando esto se ejecuta en el nivel 7 de la API AVD 2.1, todo funciona bien. Pero cuando se ejecuta en una Samsung Galaxy Tab que ejecuta Gingerbread, el servicio se iniciará (el icono y el nombre de la aplicación aparecerán en la parte superior del área de notificación), pero luego de unos segundos, el servicio desaparecerá. La última entrada en el registro que puedo ver está asociada a mi aplicación, es el resultado de mi Log.d ("Taglines", "Returning with" + START_STICKY), que precede inmediatamente a "return START_STICKY". en mi anulación onStartCommand del servicio, de la siguiente manera:START_STICKY, el servicio de primer plano de Android se va sin previo aviso
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
int rc ;
Log.d("Taglines","onStartCommand()");
Toast.makeText(this, "Starting service TagsManager", Toast.LENGTH_SHORT).show();
Log.d("Taglines","Calling super.onStartCommand()");
rc = super.onStartCommand(intent,flags,startId);
Log.d("Taglines","super.onStartCommand return code was " + rc);
createNotification(INITIAL_NOTIFICATION_TEXT);
Log.d("Taglines","Returning with " + START_STICKY);
return START_STICKY ;
}
La notificación se establece así:
Este es el resultado de "Logcat adb" cuando se inicia el servicio:
D/Taglines(21863): Starting service
D/Taglines(21863): TagsManager(nullary) completed
D/Taglines(21863): onStartCommand()
D/Taglines(21863): Calling super.onStartCommand()
D/Taglines(21863): super.onStartCommand eturn code was 2
D/Taglines(21863): createNotification called
D/Taglines(21863): Obtained reference to Notification Manager
D/Taglines(21863): createNotificacion() .. getApplicationContext
D/Taglines(21863): createNotificacion() ... passing notification
D/Taglines(21863): Starting foreground
D/Taglines(21863): Started
D/Taglines(21863): Returning with 1
Después de eso, nada especial (nada en absoluto de PID 21863). Sólo un montón de:
D/KeyguardViewMediator( 302): setHidden false
D/KeyguardViewMediator( 302): setHidden false
D/KeyguardViewMediator( 302): setHidden false
D/KeyguardViewMediator( 302): setHidden false
D/KeyguardViewMediator( 302): setHidden false
W/InputManagerService( 302): Window already focused, ignoring focus gain of: [email protected]
D/KeyguardViewMediator( 302): setHidden false
D/KeyguardViewMediator( 302): setHidden false
D/KeyguardViewMediator( 302): setHidden false
D/KeyguardViewMediator( 302): setHidden false
D/KeyguardViewMediator( 302): setHidden false
D/KeyguardViewMediator( 302): setHidden false
D/KeyguardViewMediator( 302): setHidden false
D/KeyguardViewMediator( 302): setHidden false
D/KeyguardViewMediator( 302): setHidden false
No creo que se necesita en este caso, pero aquí está la parte correspondiente de la AndroidManifest.xml:
<service android:name=".TagsManager"
android:exported="false">
</service>
¿Dónde podría haber ido mal? ¿Qué otra información puedo proporcionar?
Hmmm ... He leído más sobre startForeground, y parece que esto solo establece un indicador en un objeto de notificación, en lugar de tomar alguna medida. Así que por capricho, invertí la secuencia de modo que ahora startForeground preceda a NotificationManager.notify. Hasta el momento, se ve bastante bien. Así que ahora estoy buscando ese ejemplo que me llevó a hacerlo de otra manera ... – Dennis
Lamentablemente, el éxito de revertir esa secuencia fue de corta duración. Parece ser un poco arriesgado si el adhesivo se "pegará". Con _muchas_ docenas de intentos para comenzar este servicio, he tenido que continuar tres veces hasta ahora. :( – Dennis
Bueno, ¿su Galaxy Tab experimentaba condiciones de poca memoria, o tal vez su Servicio estaba haciendo algo de memoria intensiva en el hilo principal? –