Я создаю приложение, которое использует 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;
}
}
Почему вы прокомментировали 'super' методы в классе обслуживания ? Где вы начинаете обслуживание? startService не вызывается в вашем коде. – Vyacheslav
Потому что я думаю, что этот метод должен возвращать целочисленное значение, а команда STICKY - это. startService вызывается в MainActivity (почти в конце строк) @Vyacheslav Я изменил это и теперь возвращает этот супер метод. – gryzek
Прежде всего, всегда используйте супер методы в этом случае. – Vyacheslav