doco для startService заявляет: "Если эта служба еще не запущена, она будет создана и запущена (при необходимости будет создан процесс для нее), если он запущен, он остается включенным". Я обнаружил, что каждый вызов startService запускает экземпляр отдельный службы, в том, что работа, выполняемая службой (в моем тестовом примере, тривиальная запись в новый файл журнала) выполняется снова для каждого вызова. Я пытаюсь обнаружить сервис, перейдя через ActivityManager... getRunningServices (Integer.MAX_VALUE)), но он не отображается. Android 2.3.3 на SGS 11 Мне что-то не хватает. Я понял, что метод service onCreate() вызывается только при его создании и что, поскольку у меня есть непрерывный процесс, выполняющийся в Сервисе (
В моей операции onResume я запускаю сервис ( "myService" ) с помощью
Intent intent = new Intent(this, myService.class);
startService(intent);
В MyService у меня есть onCreate, например
@Override
public void onCreate(){
super.onCreate();
...
откуда я устанавливаю таймер, используя TimerTask, который записывает в файл журнала один раз/секунду.
Это работает так, как ожидалось - я вижу, как записывается журнал. В методе Activity onResume перед вызовом метода StartService я проверяю, существует ли служба myService, вызывая метод checkForRunningService, содержащий
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (service.service.getClassName().contentEquals("com.gpsanimator.startrax.myService")) {
Toast.makeText(getApplicationContext(), "Service IS SO running: ", Toast.LENGTH_SHORT).show();
return true;
}
Это никогда не находит службу myService, даже если она работает, так как она счастливо записывается в файл журнала.
Время Eeach, когда я возобновляю свою активность, вызывается метод onCreate моей службы myService - он генерирует новый файл журнала и начинает писать на него, а также постоянно обновляется исходный файл журнала. Не запускается ли служба при первом запуске startService? А потом продолжить? Не следует ли последующим вызовам startService() найти уже запущенную службу и, следовательно, не запускать метод onCreate() еще раз? Но это не то, что я вижу. Кажется, что каждый вызов startService() запускает метод Service onCreate().
Это явно более сложное, чем это, и я хотел бы разобраться в нем.