Как запустить 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()
, но это даже не гарантируется для запуска каждый раз.