Структура класса обслуживания в Android - вопросы и проверка работы

В настоящее время я возобновляю проект, над которым я работал, и начинаю с нуля, чтобы воссоздать его.
Однако при создании класса Service я кое-что заметил - в моем старом проекте метод внутри Service с именем onStartCommand содержит весь код, который необходимо запустить, тогда как в моем новом проекте, когда я создаю класс Service, этот метод нигде не найти.

Нужно вручную добавить этот метод "onStartCommand", чтобы содержать мой код службы?

- Если нет, то где именно мой код будет идти? Похоже, в коде моего "старого" проекта я полностью комментирую, блокирую публичный TimerService и передаю null в IBinder, вместо этого создаю onStartCommand и т. Д., И я не могу понять, почему.

- Пока я здесь, кто-нибудь может перепроверить мой код CountdownTimer ниже? и если это правильно, я должен положить его внутри потока?


Когда я создаю новый класс обслуживания, он выглядит так:

public class TimerService extends Service {

    public TimerService() {

    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");

    }

}


Однако в моем старом Project мой класс Service выглядит так:

public class TimerService extends Service {

/*
public TimerService() {

}
*/

@Override
public IBinder onBind(Intent arg0) {
    return null;
}

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

    intent.getStringExtra("TIMER_VALUE");

    String string_timerValue;
    string_timerValue = intent.getStringExtra("TIMER_VALUE");

    long long_timerValue;
    long_timerValue = Long.parseLong(String.valueOf(string_timerValue));

    // I DO NOT WANT ANY TICK VALUE, SO GIVE IT FULL TIMER VALUE
    long long_tickValue;
    long_tickValue = Long.parseLong(String.valueOf(string_timerValue));

    new CountDownTimer(long_timerValue, long_tickValue) {

        public void onTick(long millisUntilFinished) {
            // DO NOTHING
        }

        public void onFinish() {

            Toast.makeText(TimerService.this, "TIMES UP", Toast.LENGTH_LONG).show();

            stopService(intent);

        }
    }.start();

    return START_STICKY;

    // END OF onStartCommand
}

@Override
public void onDestroy() {
    super.onDestroy();

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

// END OF ENTIRE SERVICE CLASS
}


БЛАГОДАРЮ ВАС!!

1 ответ

Решение

Нужно ли мне вручную добавлять этот метод onStartCommand, чтобы он содержал мой сервисный код?

Да.

Может ли кто-нибудь перепроверить мой код CountdownTimer ниже?

Создавайте услугу только тогда, когда это абсолютно необходимо. Неясно, зачем нужен этот сервис.

Сверх того:

  • использование stopSelf()не stopService(), чтобы остановить службу внутри этой службы.

  • Изучение Intent Экстры и использование START_STICKY не очень хорошая комбинация START_STICKY говорит "если вы прервете мой процесс, чтобы освободить системную память, пожалуйста, перезапустите мой сервис, когда это возможно, но передайте null для IntentMsgstr "Это приведет к сбою службы NullPointerException,

Другие вопросы по тегам