Android bindService o / y startService
Quiero crear servicio utilizando el método bindService
. Pero cuando cierro una Actividad mi Servicio es destruido, y no quiero eso.
Trato de poner el servicio en primer plano con startForeground(NOTIFICATION_ID, notification);
Servicio onCreate, pero el servicio sigue destruyendo.
Ahora intento con dos métodos de la llamada para comenzar el servicio al mismo tiempo:
Intent bindIntent= new Intent(this, ServiceC.class); startService(bindIntent); bindService(bindIntent, onService, BIND_AUTO_CREATE);
Al llamar a estos dos métodos Servicio no destruido. Mi aplicación funciona bien con este método.
¿Puede alguien explicarme si esto es una buena manera o si no es puede por favor darme idea por qué startForeground(NOTIFICATION_ID, notification);
no funciona ?
Cuál es la mejor manera de utilizar bindService pero al mismo tiempo no quiero que el servicio se destruya.
Utilicé la misma solución y es legítima. De servicio ref:
Un servicio puede iniciarse y tener conexiones vinculadas a él. En tal caso, el sistema mantendrá el servicio funcionando siempre que se inicie o haya una o más conexiones con el indicador Context.BIND_AUTO_CREATE. Una vez que ninguna de estas situaciones se mantiene, el método onDestroy () del servicio es llamado y el servicio se termina de manera efectiva.
startForeground()
no está funcionando porque sólo intenta evitar que el servicio sea destruido por el sistema, pero su ciclo de vida es otra cosa: si nada está más ligado a ese servicio y no se inició, simplemente se detiene.
Si inicia el servicio con startService () no se destruye. Intentado comenzar un servicio, que extienda IntentService y tenga un lazo en onHandleIntent (). Cuando se termina el bucle, el servicio se destruye y no se relaciona con el fin de la actividad. El usuario puede cerrar la aplicación, pero el servicio no se está matando.
public class MyService extends IntentService { private static final String serviceName = "MyService "; public MyService () { super(serviceName); } @Override public void onDestroy() { Log.v(serviceName, "onDestroy"); Toast.makeText(this, serviceName+" stopped", Toast.LENGTH_LONG).show(); super.onDestroy(); } @Override protected void onHandleIntent(Intent arg0) { long endTime = System.currentTimeMillis() + 30*1000; while (System.currentTimeMillis() < endTime) { synchronized (this) { try { Log.v(serviceName, "Service loop"); wait(1000); } catch (Exception e) { } } } } }