Нужно ли добавлять фильтр намерений при запуске службы? - PullRequest
6 голосов
/ 26 июня 2010

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

Внести запись об этом сервисе в AndroidManifest.xml как

<service android:name="MyService">
<intent-filter>
<action
android:name="com.wissen.startatboot.MyService" />
</intent-filter>
</service>

Теперь запустите эту службу в методе onReceive BroadStReceiver MyStartupIntentReceiver как

public void onReceive(Context context, Intent intent) {
    Intent serviceIntent = new Intent();
    serviceIntent.setAction("com.wissen.startatboot.MyService");
    context.startService(serviceIntent);

}

Как вы видите, он использует фильтры намерений и при запуске служба добавляет действие.Могу ли я просто использовать

startService(new Intent(this, MyService.class));

В чем преимущество одного из них перед другим?

Ответы [ 2 ]

7 голосов
/ 26 июня 2010

Предполагая, что это все в одном приложении, вы можете использовать последнюю форму (MyService.class).

В чем преимущество одного по сравнению с другим?

Я бы использовал строку настраиваемого действия, если бы вы хотели, чтобы третьи лица запускали эту службу.

0 голосов
/ 18 октября 2013

Как я уже упоминал в комментарии , действия могут быть полезны при самостоятельном тестировании.Например, сервис выполняет много задач.Для каждой задачи есть действие.Если служба запускается с неизвестным действием, будет выброшено IllegalArgumentException.

Я обычно использую этот подход в onStartCommand.

String action = intent.getAction();
if (action.equals(ACT_1)) { 
    // Do task #1
} else if (action.equals(ACT_2)) {
    // Do task #2
} else { 
    throw IllegalArgumentException("Illegal action " + action);
}
...