2016-01-12 6 views
0

Я создаю приложение, которое использует CountDownTimer. Я бы хотел использовать метод «Сервис» для правильной работы CountDownTimer в фоновом режиме.Служба не работает должным образом в CountDownTimer

Но в моей реализации кода он работает неправильно.

Служба не показывает текст в Toast и не отправляет правильно намерение на активность, возможно. Должен ли я использовать этот код CountDownTimer в классе MyService? Может ли кто-нибудь помочь мне в этом?

Это MainActivity.java

public class MainActivity extends ActionBarActivity { 

    Button btnStart, btnStop; 
    TextView textViewTime; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     btnStart = (Button) findViewById(R.id.btnStart); 
     btnStop = (Button) findViewById(R.id.btnStop); 
     textViewTime = (TextView) findViewById(R.id.textViewTime); 

     textViewTime.setText("00:01:30"); 

     final CounterClass timer = new CounterClass(90000, 1000); 
     btnStart.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       timer.start(); 
      } 
     }); 

     btnStop.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       timer.cancel(); 
      } 
     }); 
     } 

    public class CounterClass extends CountDownTimer { 

     public CounterClass(long millisInFuture, long countDownInterval) { 
      super(millisInFuture, countDownInterval); 
     } 

     @Override 
     public void onTick(long millisUntilFinished) { 
      long millis = millisUntilFinished; 
      String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis), 
        TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)), 
        TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))); 
      System.out.println(hms); 
      textViewTime.setText(hms); 

     } 

     @Override 
     public void onFinish() { 
      textViewTime.setText("Completed."); 
     } 
    } 

    public void startService(View view) 
    { 
     Intent intent = new Intent(this,MyService.class); 
     startService(intent); 
    } 

    public void stopService(View view) 
    { 
     Intent intent = new Intent(this,MyService.class); 
     stopService(intent); 
    } 


} 

Это MyService.java

public class MyService extends Service { 



    @Override 
    public void onCreate() { // initial performance (setup service in this method) 
     super.onCreate(); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { // create start a service 

     Toast.makeText(this,"Service Started...",Toast.LENGTH_LONG).show(); 



     return START_STICKY; 
     //return super.onStartCommand(intent, flags, startId); 
    } 

    @Override 
    public void onDestroy() { // stop a service 

     Toast.makeText(this,"Service Destroyed...", Toast.LENGTH_LONG).show(); 

     //super.onDestroy(); 
    } 

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 
} 
+0

Почему вы прокомментировали 'super' методы в классе обслуживания ? Где вы начинаете обслуживание? startService не вызывается в вашем коде. – Vyacheslav

+0

Потому что я думаю, что этот метод должен возвращать целочисленное значение, а команда STICKY - это. startService вызывается в MainActivity (почти в конце строк) @Vyacheslav Я изменил это и теперь возвращает этот супер метод. – gryzek

+0

Прежде всего, всегда используйте супер методы в этом случае. – Vyacheslav

ответ

0
btnStart.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
startService(v); 
      timer.start(); 
     } 
    }); 

    btnStop.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
stopService(v); 
      timer.cancel(); 
     } 
    }); 
    } 
+0

Я изменил это. Но теперь он показывает только текст Toast, но я не понимаю, почему, когда я отключу это приложение, и я иду в «Running Apps», он закрыт. В манифесте я: Тем не менее, этот таймер по-прежнему не работает после того, как я нажал кнопку «Назад». Когда я вернусь, это перезапуск таймера. – gryzek

+0

@ gryzek, если он работает, отметьте этот ответ как правильный. – Vyacheslav

+0

@gryzek, таймер обратного отсчета не работает из-за того, что вы включили его в действие. Попробуйте запустить внутри метода Service.onCreated. – Vyacheslav

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