Служба Android никогда не запускается - onStartCommand() не вызывается

Я пытаюсь создать службу, которая будет обрабатывать ввод-вывод файлов в фоновом режиме. Действия, связанные с обновлением данных, будут привязаны к службе и вызовут методы службы для ввода-вывода. Я использую документацию для Android для руководства.

Однако мое обслуживание, похоже, не хочет начинаться. В методе onCreate() моей активности у меня есть:

Intent smsIntent = new Intent(this, SurveyManagerService.class);    
String surveyFilename = getIntent().getStringExtra("surveyFilename");   
System.out.println(startService(smsIntent)); //testing if it starts
SurveyManagerServiceConnection connection = new SurveyManagerServiceConnection();
sms = connection.getSurveyManagerService();

В строке 3 LogCat выводит объект ComponentInfo, поэтому создается сервис; однако sms равно null. Кроме того, метод SurveyManagerService onStartCommand() никогда не называется:

@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
    System.out.println("starting service");
    Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();
    openSurveyFromIntent(intent);
    return START_REDELIVER_INTENT;
}

Я никогда не вижу выхода "start service" в LogCat, и не появляется Toast.

Моя служба объявлена в моем манифесте как:

<service android:name=".SurveyManagerService" android:exported="false" android:enabled="true">
</service>

Мне что-то не хватает? Позвольте мне знать, какую другую информацию я должен предоставить для диагностики проблемы.

Ответ 1

Кажется, что метод onCreate() должен выйти до того, как служба может начать. Как только я удалил запрос getSurveyManagerService(), и как только прошло немного времени, я получил сообщения System.out, указывающие, что служба запускается.

К сожалению, это создает еще одну проблему: Activity использует сервис для своих данных, поэтому мне нужно определить, как заставить Activity ждать запуска службы.

EDIT: Мое решение состояло в создании частного подкласса моего ServiceConnection в моей деятельности. Затем я переопределяю метод onServiceConnected(), чтобы предоставить Деянию свои данные (в этом случае заполнение ListView).

Ответ 2

Может быть, вы случайно разместили тег службы вне тега приложения? Затем служба просто терпит неудачу. Хотя в журнале должно быть ошибка "Невозможно запустить службу Intent...".

Ответ 3

Обязательно объявите свою услугу в AndroidManifest.xml

<application>
    ...
    <service android:name=".path.to.service.MyService"/>
</application>

Ответ 4

В моем случае я реорганизовал класс обслуживания и заметил, что он не был автоматически реорганизован в манифест. Поэтому мне пришлось вручную обновить полное имя службы в манифесте.