2010-12-17 5 views
11

Я до сих пор свежий для 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> 

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

ответ

8

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

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

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

под Тематической тег для этой деятельности в AndroidManifest.xml.

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

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

+0

Этот метод блокирует пользовательский интерфейс при запуске операции, но поскольку он настроен на просвечивание, никто не может ничего сделать. Есть ли способ избежать блокировки этого пользовательского интерфейса – 2013-01-10 22:56:43

+0

@ Noble6 - обновил мой ответ, чтобы сделать его более понятным. Спасибо за ценный комментарий. – Zelimir 2013-01-11 08:43:28

19

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

Смежные вопросы