Как запустить Android-сервис при запуске приложения?

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

    <service android:name=".PlaylistUpdaterService">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </service>

Но это не так. Что я пропустил?

Ответ 1

Исправьте меня, если я ошибаюсь, но android.intent.category.LAUNCHER действителен только для Activity. Таким образом, это не похоже на правильный способ запуска службы. То же самое можно сделать, если вы выполните следующее:

  • создать прозрачную активность, которая будет использоваться только для запуска службы
  • для этого действия вам не нужно указывать макет графического интерфейса. Таким образом, вам не нужно устанавливатьContentView() в действие onCreate(). Единственное, что вам нужно - это поставить

@android: стиль /Theme.NoDisplay

в разделе Тема для этой операции в AndroidManifest.xml.

  • запустите службу из onCreate() вашей деятельности.
  • вызовите finish() в onStart() своей активности, чтобы закрыть его.

Итак, ваше действие будет невидимым для пользователя, последнее в ближайшее время, и никто не заметит, что он использовался для запуска службы.

Ответ 2

Неправильно! расширьте класс Application (создайте IE), затем в onCreate() сделайте это.

//Service is below
Intent serviceIntent = new Intent(getApplicationContext(), PlaylistUpdaterService.class);
startService(serviceIntent);

И возьмите это дерьмо фильтра цели из объявления в файле манифеста. Оставьте это как

<service android:name=".PlaylistUpdaterService">

Фильтр намерений должен быть только в вашей домашней деятельности

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> 

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

Фактически, если вы хотите, чтобы служба запускалась каждый раз, когда вы возвращаетесь на главный экран, вы должны запустить службу в своих домашних классах onResume(). Ввод его в приложения onCreate() приведет к запуску службы только в том случае, если пользователь запускается в первый раз или после того, как запущенный процесс был убит. Или вы можете поместить его в свои домашние классы onCreate(), но это даже не гарантируется для запуска каждый раз.