Структура класса обслуживания в 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
дляIntent
Msgstr "Это приведет к сбою службыNullPointerException
,