Захватите таймер обратного отсчета в различных действиях

Я разрабатываю таймер обратного отсчета, который отлично работает, но только если я останусь в этом 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 и начну еще один, чтобы показать время, которое отсчитывается на заднем плане, чтобы показать его, например, в текстовом представлении.

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


person Txispas    schedule 28.02.2012    source источник


Ответы (1)


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

person Rich    schedule 28.02.2012
comment
баф я потерялся!! Можно ли получить время, которое я показываю в панели уведомлений? Потому что идет обратный отсчет каждую секунду - person Txispas; 28.02.2012