vida tareas studio siempre servicios servicio segundo procesos plano pausar mantener limite estandar ejecutar como ciclo aplicaciones aplicacion activar abierta android service alarmmanager timertask

tareas - servicios en segundo plano android studio



Iniciar el servicio de Android después de cada 5 minutos (3)

A continuación, proporcioné tres archivos, MainActivity.java para el servicio de inicio, el segundo archivo MyService.java que brinda el servicio de 5 minutos y el tercero es el archivo de manifiesto.

MainActivity.java

public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); startService(new Intent(this, MyService.class)); //start service which is MyService.java } }

MyService.java

public class MyService extends Service { public static final int notify = 300000; //interval between two services(Here Service run every 5 Minute) private Handler mHandler = new Handler(); //run on another Thread to avoid crash private Timer mTimer = null; //timer handling @Override public IBinder onBind(Intent intent) { throw new UnsupportedOperationException("Not yet implemented"); } @Override public void onCreate() { if (mTimer != null) // Cancel if already existed mTimer.cancel(); else mTimer = new Timer(); //recreate new mTimer.scheduleAtFixedRate(new TimeDisplay(), 0, notify); //Schedule task } @Override public void onDestroy() { super.onDestroy(); mTimer.cancel(); //For Cancel Timer Toast.makeText(this, "Service is Destroyed", Toast.LENGTH_SHORT).show(); } //class TimeDisplay for handling task class TimeDisplay extends TimerTask { @Override public void run() { // run on another thread mHandler.post(new Runnable() { @Override public void run() { // display toast Toast.makeText(MyService.this, "Service is running", Toast.LENGTH_SHORT).show(); } }); } } }

AndroidManifest.xml

<service android:name=".MyService" android:enabled="true" android:exported="true"></service>

Estuve buscando en Internet los últimos 2 días, pero no encontré ningún tutorial útil. He creado un servicio y estoy enviando una notificación en la barra de estado cuando se inicia el servicio. Quiero que el servicio se detenga después de mostrar la notificación y volver a iniciarlo después de 5 minutos. Por favor, avíseme si es posible y bríndeme algunos tutoriales útiles si tiene alguno. Escuché sobre TimerTask y AlarmManager y traté de usarlos también, pero no pude obtener el resultado deseado.

EDITAR: Necesito que el servicio se inicie cada 5 minutos, incluso si mi aplicación no se está ejecutando.


Crea un objeto Timer y dale una TimerTask que realice el código que te gustaría realizar.

Timer timer = new Timer (); TimerTask hourlyTask = new TimerTask () { @Override public void run () { // your code here... } }; // schedule the task to run starting now and then every hour... timer.schedule (hourlyTask, 0l, 1000*60*60); // 1000*10*60 every 10 minut

La ventaja de usar un objeto Timer es que puede manejar múltiples objetos TimerTask, cada uno con su propio tiempo, demora, etc. También puede iniciar y detener los temporizadores siempre que mantenga presionado el objeto Timer al declararlo como una clase Variable o algo así.


No desea utilizar una TimerTask ya que esto depende de que su aplicación se ejecute continuamente. Una implementación de AlarmManager hace que sea seguro que su aplicación sea eliminada entre ejecuciones.

Afirmar que intentó usar AlarmManager pero no obtuvo el resultado deseado no es una declaración útil, ya que no le dice a nadie cómo ayudarlo a hacerlo bien. Sería mucho más útil expresar lo que sucedió.

http://code4reference.com/2012/07/tutorial-on-android-alarmmanager/ contiene lo que parece ser un tutorial útil sobre AlarmManager . Aquí están los puntos más destacados:

1) Su alarma provocará que se dispare una Intent cuando caduque. Depende de usted decidir qué tipo de Intent y cómo debe implementarse. El enlace que proporcioné tiene un ejemplo completo basado en un BroadcastReceiver.

2) Puedes instalar tu alarma con un ejemplo como:

public void setOnetimeTimer(Context context) { AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class); intent.putExtra(ONE_TIME, Boolean.TRUE); PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0); am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (1000 * 60 * 5), pi); }