Implementé el comando START_STICKY pero el servicio se cancela después de unas horas. Lo que quiero hacer es mantener un servicio ejecutándose siempre en segundo plano y reiniciar incluso cuando se reinicia el dispositivo. ¿Puedo reiniciar el servicio en el método onDestroy de esta manera? o hay un enfoque más conveniente para ello?
@Override public void onDestroy() { Stop(); Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show(); Intent i= new Intent(getApplicationContext(), MyService.class); startService(i); }Para asegurarse de que su servicio se está ejecutando incluso después de algunas horas de iniciarlo, deberá usar AlarmManager , que se ejecutará de forma recurrente durante una periodicidad específica, incluso si la aplicación se cierra. Lo que hará es registrar un PendingIntent para que se active el AlarmManager , que será recibido por un BroadcastReceiver y en el BroadcastReceiver verificará si su Servicio se está ejecutando o no. Si se está ejecutando, no haga nada y, si no, inicie el servicio.
Lo que quiero hacer es mantener un servicio ejecutándose siempre en segundo plano y reiniciar incluso cuando se reinicia el dispositivo.
Para ello tendrás que dar este permiso en el manifiesto:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> y luego tendrá que crear un BroadcastReceiver personalizado que verificará si se activa una intención, que es Action.BOOT_COMPLETED .
Debe declarar su BroadcastReceiver para captar la intención mencionada anteriormente en el Manifiesto de Android de esta manera:
<receiver android:name="com.example.MyBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> Ahora puede inicializar su AlarmManager en la clase BroadcastReceiver o puede escribir el código para iniciar el servicio de inmediato.
Puede encontrar información sobre AlarmManager aquí .
Descargo de responsabilidad: a partir de Android O , Google dejará de admitir el Servicio en segundo plano ilimitado y llamar a startService() se volverá ilegal (Android lanzará IllegalStateException) al llamar a esta función.