android - siempre - manteniendo el servicio en segundo plano vivo después de la aplicación de salida del usuario
servicios en primer plano android studio (5)
Los servicios fueron diseñados para ejecutarse en segundo plano, sin necesidad de un proceso diferente.
De la documentación de servicios:
Una vez iniciado, un servicio puede ejecutarse en segundo plano indefinidamente, incluso si el componente que lo inició se destruye.
Sin embargo, el servicio debe detenerse solo cuando su trabajo esté terminado. IntentService es la forma más fácil de comenzar a implementar un servicio.
Intento crear un servicio que me haga trabajos en segundo plano incluso después de que el usuario cierra la aplicación desde el menú de procesos en ejecución (desplazando el proceso fuera de la pantalla).
Lo que traté de hacer fue crear un servicio en un proceso diferente al declararlo así:
<service
android:name=".service.Service"
android:enabled="true"
android:icon="@drawable/ic_launcher"
android:process=":my_process" >
</service>
y onStartCommand () es:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
Una forma de hacer esto. Supongamos que tiene una clase de servicio llamada "DoSomething". En Android Manifest
declara:
<service android:name = ".DoSomething"></service>
En la clase de servicio:
Handler handler = new Handler();
Runnable runnable = new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
YourMethod();
handler.postDelayed(this, 1000); // 1000 - Milliseconds
}
};
Y finalmente:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
handler.postDelayed(runnable, 1000);
return START_STICKY;
}
De tu actividad:
Intent intent = new Intent(this, DoSomething.class);
startService(intent);
Espero que ayude.
En realidad, hay diferentes tipos de servicios que puede implementar. Use un servicio en lugar de IntentService
. Allí debe mirar START_STICKY
, START_NOT_STICKY
y START_REDELIVER_INTENT
para que su servicio se mantenga en segundo plano, incluso si su actividad fallece. Los servicios de Android también miran los servicios de AIDL
Para esto puedes usar Handler y Runnable class
@Override
public void onCreate()
{
Toast.makeText(context, "SMS SERVICE START", Toast.LENGTH_SHORT).show();
handler=new Handler();
runnable=new Runnable() {
@Override
public void run()
{
TASK();
handler.postDelayed(runnable,180000);
// 3min delay
}
};
handler.postDelayed(runnable,180000);
super.onCreate();
}
Esta tarea se ejecuta continuamente 3 minutos
public void TASK()
{
//your task
}
De acuerdo con la documentación del Servicio , puede lograr este comportamiento utilizando el atributo:
android:isolatedProcess="true"
Por cierto, sé que no está respondiendo a la pregunta, pero podría ayudar también a algunas personas. Últimamente descubrí una gran utilidad de terceros creada por los desarrolladores de Evernote. Su nombre es JobManager y su objetivo es crear trabajos que se ejecutan en diferentes procesos y pueden volver a activarse incluso después de reiniciar el dispositivo. asombroso.