Temporizador de cuenta atrás Android en segundo plano

Tengo una aplicación para Android que gestiona un countdowntimer (clase CountDownTimer) que se muestra en la pantalla de la aplicación, para mostrar cuánto tiempo falta para llegar a las 00:00.

Mi problema ahora es que cuando presiono el botón de inicio o cuando lanzo otra aplicación, la aplicación / temporizador no se ejecuta en segundo plano. Así que sospecho que debo hacer un servicio, pero ¿cómo? Colegas me han dicho que debo hacer algo especial para cuando el dispositivo se bloquea para que el temporizador de continuar. Quiero despertar cuando llegue a 0.

¿Cuál es la mejor manera de hacer esto?

3 Solutions collect form web for “Temporizador de cuenta atrás Android en segundo plano”

Debe crear su clase CountDownTimer y extenderla desde la clase Service. Al hacerlo, su actividad se convierte en un servicio y se ejecuta en segundo plano, incluso si se cierra la aplicación o la pantalla no importa, sólo hace la tarea que le asigna en el fondo.

En primer lugar, usted necesita utilizar un controlador para operar el temporizador, pero echa un vistazo a este gran post para ver si ayuda:

Cómo configurar un temporizador en android

Los recursos para desarrolladores de Android tocan este tema también:

http://developer.android.com/resources/articles/timed-ui-updates.html

La manera más fácil es utilizar el servicio con asíncrono de temporizador. Puedes descargar el código desde aquí ( Android Countdown Timer Run In Background )

Clase de servicio:

 package com.countdowntimerservice; import android.app.Service; import android.content.Intent; import android.content.SharedPreferences; import android.os.Handler; import android.os.IBinder; import android.preference.PreferenceManager; import android.support.annotation.Nullable; import android.util.Log; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.TimeUnit; public class Timer_Service extends Service { public static String str_receiver = "com.countdowntimerservice.receiver"; private Handler mHandler = new Handler(); Calendar calendar; SimpleDateFormat simpleDateFormat; String strDate; Date date_current, date_diff; SharedPreferences mpref; SharedPreferences.Editor mEditor; private Timer mTimer = null; public static final long NOTIFY_INTERVAL = 1000; Intent intent; @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); mpref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); mEditor = mpref.edit(); calendar = Calendar.getInstance(); simpleDateFormat = new SimpleDateFormat("HH:mm:ss"); mTimer = new Timer(); mTimer.scheduleAtFixedRate(new TimeDisplayTimerTask(), 5, NOTIFY_INTERVAL); intent = new Intent(str_receiver); } class TimeDisplayTimerTask extends TimerTask { @Override public void run() { mHandler.post(new Runnable() { @Override public void run() { calendar = Calendar.getInstance(); simpleDateFormat = new SimpleDateFormat("HH:mm:ss"); strDate = simpleDateFormat.format(calendar.getTime()); Log.e("strDate", strDate); twoDatesBetweenTime(); } }); } } public String twoDatesBetweenTime() { try { date_current = simpleDateFormat.parse(strDate); } catch (Exception e) { } try { date_diff = simpleDateFormat.parse(mpref.getString("data", "")); } catch (Exception e) { } try { long diff = date_current.getTime() - date_diff.getTime(); int int_hours = Integer.valueOf(mpref.getString("hours", "")); long int_timer = TimeUnit.HOURS.toMillis(int_hours); long long_hours = int_timer - diff; long diffSeconds2 = long_hours / 1000 % 60; long diffMinutes2 = long_hours / (60 * 1000) % 60; long diffHours2 = long_hours / (60 * 60 * 1000) % 24; if (long_hours > 0) { String str_testing = diffHours2 + ":" + diffMinutes2 + ":" + diffSeconds2; Log.e("TIME", str_testing); fn_update(str_testing); } else { mEditor.putBoolean("finish", true).commit(); mTimer.cancel(); } }catch (Exception e){ mTimer.cancel(); mTimer.purge(); } return ""; } @Override public void onDestroy() { super.onDestroy(); Log.e("Service finish","Finish"); } private void fn_update(String str_time){ intent.putExtra("time",str_time); sendBroadcast(intent); } } 
  • Recolector de datos de sensor de fondo en Android
  • Diferencia entre los receptores de servicio y difusión en android
  • Crear notificación cada día
  • Depurar servicio de fondo en android utilizando intelliJ
  • Enviar correo electrónico en servicio (sin preguntar al usuario)
  • Detectar el evento "botón de inicio presionado" en el servicio android que muestra una interfaz de usuario (similar a los cabezales de chat de Facebook)
  • Gestión de devoluciones de llamada del servicio remoto
  • Android: ¿Cómo repetir un servicio con AlarmManager cada 15 minutos, pero sólo se ejecuta de 8:00 AM a 18:00 PM?
  • ResultReceiver no sobrevive a la rotación de la pantalla
  • Envío de una notificación desde un servicio en Android
  • ¿Cómo mantener un servicio con los oyentes vivo después de desatar en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.