2015-11-04 4 views
1

У меня есть служба с таймером в фоновом режиме. Этот таймер выполняет задание через 20 секунд. Я хочу, чтобы такой же таймер для выполнения другой задача, но в другое количество секунд. Это было бы легко, одновременно запустив обе службы, но я пытаюсь узнать, как я могу это сделать другим способом.Объединить две службы?

Я попытался это, но он не показывает вверх:

cdt = new CountDownTimer(20000, 1000) { 

      @Override 
      public void onTick(long millisUntilFinished) { 

       Log.v(TAG, /*"Time remaining " +*/ (millisUntilFinished/1000) + " seconds left"); 


       if(millisUntilFinished/10000 == 0){ //TEN SECONDS 
        Log.v(TAG, (millisUntilFinished % 1000) + " seconds left"); 
       } 

      } 

      @Override 
      public void onFinish() { 
       Log.v(TAG, "Finished"); 

Теперь я должен получать два разные сообщения журнала в десять секунд. Вместо этого я получаю только один. Вот мой LogCat:

enter image description here

Стрелка указывает, где должно было быть еще одно сообщение журнала.

Я потерян. Я был бы очень признателен за любые отзывы (положительные или отрицательные)! Большое вам спасибо за вашу помощь.

ответ

1

Как вы сами сказали, вы можете одновременно запускать обе службы.

В первой службе вы можете передать Intent с некоторыми параметрами, чтобы сообщить новое количество времени, а затем позвонить startService().

Intent it = new Intent(getApplicationContext(), YourService.class); 
it.putExtra("Time", timeInMillis); 
startService(it); 

Я имею в виду, изменить ваш Service, чтобы получить дополнительные от вызывающей Intent, что-то вроде этого:

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 

    if (intent != null) { 
     long time = intent.getLongExtra("Time",0); 
     // Do your ticking here, based on that variable. 
    } 
    //... 
} 

Edit: Допустим, вы хотите сделать свой бег таймера первым на 5 секунд, затем на 10, 15 и так далее.

Как только вы закончите свой таймер, вы можете передать Intent новым Service/Таймер, добавив нужные секунды. Нравится:

it.putExtra("Time", timeInMillis + 5000); 
+0

Когда я поставлю дополнительное оборудование, потому что я хочу его только через 10 секунд. Кроме того, сторона примечание: я планировал иметь эти сообщения через больше интервалов. Например, на 5 и 10 и 15; создание новых услуг для каждого из них было бы болью. Есть ли другие способы, которыми я могу это сделать?Если нет, все в порядке, просто скажите мне, где разместить намерения для кода, который вы дали. Спасибо! –

+0

Я думаю, что есть много способов, которыми вы могли бы выполнить это поведение ... Мое редактирование является одним из этих способов. Если вы действительно используете класс 'Service'. – Mauker

+0

Спасибо, я дал вам лучший ответ и понравился ваш пост! –

0

Используйте этот тип.

cdt = new CountDownTimer(10000, 1000) { //finished on 10 Seconds 

      @Override 
      public void onTick(long millisUntilFinished) { 
       Log.v(TAG, /*"Time remaining " +*/ (millisUntilFinished/1000) + " seconds left"); 
      } 

      @Override 
      public void onFinish() { 
       Log.v(TAG, "First 10 Seconds Finished"); 

      LoadNextCountdown(); // call the Next Countdown method 

    } 
     } 
       .start(); 

//Method for Next Countdown 

public void LoadNextCountdown() 
{ 
    cdt2=new CountDownTimer(10000,1000) { //finished on 10 Seconds 

       @Override 
       public void onTick (long millisUntilFinished){ 

        Log.v(TAG, /*"Time remaining " +*/ (millisUntilFinished/1000) + " seconds left"); 
       } 

       @Override 
       public void onFinish() { 
        Log.v(TAG, "Next 10 Seconds Finished"); 
       } 
      } .start(); 

} 

Счастливый Coding :)

+0

Спасибо за ваш ответ! Проблема в том, что 10 секунд подсчитываются ** после ** начальных 20 секунд. Моя цель состоит в том, чтобы подсчитать 20 секунд, но через 10 секунд подсчета (в том же таймере) отобразится журнал. Как мне это сделать? Спасибо –

0

Ваш журнал не отображается, потому что:

  if(millisUntilFinished/10000 == 0){ //TEN SECONDS 
       Log.v(TAG, (millisUntilFinished % 1000) + " seconds left"); 
      } 

вы хотите, чтобы увидеть, если у вас есть 10000 millisUntilFinished но 10000/10000 = 1 не равен 0.

оно должно быть:

 if(millisUntilFinished/10000 == 1) || if(millisUntilFinished % 10000 == 0) 

или просто:

if(millisUntilFinished == 10000) 
+0

Спасибо за ваш ответ! Я сделал последний метод, если (millisUntilFinished == 10000). Проблема заключается в том, что таймер обратного отсчета не является точным, поэтому он не обязательно попадает в отметку 10000. –

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