2012-02-28 3 views
3

Я создаю таймер обратного отсчета, который отлично работает, но только если я останусь в этом Activity. Потому что, если обратный отсчет начинается, и я возвращаюсь, например, и запускаю другое Activity, countdonws следует за подсчетом. И логично, если я снова начну активировать, где находится таймер обратного отсчета, он выглядит так, как будто ничего не отсчитывает, но в базе отсчитывается, я знаю, потому что в момент таймера я бросаю уведомление о продолжении, чтобы показать его на вкладку уведомлений.Захват таймера обратного отсчета в разных действиях

Код ниже, метод sendnotification - метод, который выдает предупреждение при завершении времени, и sendnotificationTiempo, чтобы отправлять уведомление на вкладку каждую секунду, чтобы показать вверху.

public static final int NOTIFICATION_ID = 33; 
public static final int NOTIFICATION_ID_Tiempo = 34; 
private int minCrono; 
TextView text; 
MyCounter timer; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


    StartCrono = (Button) findViewById(R.id.butt_start); 
    CancelCrono = (Button) findViewById(R.id.butt_cancel); 
    text=(TextView)findViewById(R.id.text_countTime1); 

    CancelCrono.setEnabled(false); 


    minCrono = mins.getCurrentItem(); 

    StartCrono.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      minCrono=(60000*minCrono);  
      timer = new MyCounter(minCrono,1000); 
      timer.start(); 
     } 
    }); 

    CancelCrono.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      timer.cancel();  
      text.setText("El tiempo se ha cancelado"); 
      minutosCrono = mins.getCurrentItem(); 

      if (mNotificationManager != null) 
       mNotificationManager.cancel(NOTIFICATION_ID_Tiempo); 

     }   
    }); 
} 

Обратный отсчет Класс:

public class MyCounter extends CountDownTimer{   
    public MyCounter(long millisInFuture, long countDownInterval) {  
     super(millisInFuture, countDownInterval);   
    } 
    @Override 
    public void onFinish() { 

     StartCrono.setEnabled(true); 
     CancelCrono.setEnabled(false); 
     mins.setEnabled(true); 
     minCrono = mins.getCurrentItem(); 
     // 

     text.setText("Time Complete!"); 

     sendnotification("Guau", "Time finished."); 

    } 
    @Override 
    public void onTick(long millisUntilFinished) { 
     long segRestantesTotal=(millisUntilFinished/1000); 
     long minRestantes= (segRestantesTotal/60); 
     long segRestantes= (segRestantesTotal%60); 


     if(segRestantes>=10){ 
      text.setText(minRestantes+":"+segRestantes); 
      sendnotificationTiempo("Guau", minRestantes+":"+segRestantes); 
     } 
     else{ 
      text.setText(minRestantes+":0"+segRestantes); 
      sendnotificationTiempo("Guau", minRestantes+":0"+segRestantes); 
     } 
    } 
} 

}

Так что я бы сделать, это знать, когда я иду назад Activity и я начинаю еще один, чтобы показать время, что является отсчет вниз на фоне, чтобы показать его, например, в текстовом виде.

Или, может быть, если я получу время, считающееся с вкладки уведомлений, совершенным. Спасибо!

ответ

0

Извлеките экземпляр MyCounter из Activity. Когда активность перезагружается, экземпляр воссоздается, поэтому старый отсутствует. Есть несколько способов сделать это, но вам нужно, чтобы ваш экземпляр MyCounter жил где-то, что Activity может получить к нему доступ, но не несет ответственности за его жизненный цикл. Я использую рудиментарную реализацию ServiceLocator, которую я написал, но вы можете легко создать собственный класс приложения и сохранить там таймер (или класс контроллера, который создает и управляет таймером).

+0

бафф Я потерял !! Можно ли получить время, которое я покажу в панели уведомлений? Потому что есть обратный отсчет каждую секунду – Txispas

Смежные вопросы