Ответ 1
Если вы хотите использовать службу для выполнения разных действий, объявление объявления фильтра намерения поможет вашей службе соответствовать различным действиям, которые вы хотите выполнить.
Пример объяснит лучше.
Предположим, у вас есть следующее объявление в файле манифеста:
<service
android:name="MyService" >
<intent-filter>
<action android:name="com.x.y.DOWNLOAD_DATA" />
<action android:name="com.x.y.UPLOAD_DATA" />
</intent-filter>
</service>
Затем в IntentService
вы можете отфильтровать эти действия следующим образом:
public class MyService extends IntentService {
public MyService() {
super("MyService");
}
@Override
protected void onHandleIntent(Intent intent) {
if(intent.getAction().equals("com.x.y.DOWNLOAD_DATA"){
//download data here
}else if(intent.getAction().equals("com.x.y.UPLOAD_DATA"){
// upload data here
}
}
}
В принципе, он позволяет использовать один и тот же сервис для разных действий, вместо того, чтобы создавать, например, две отдельные службы.
Однако наличие намеренных фильтров, объявленных для службы, не считается хорошей практикой, и об этом должны были говорить документы:
Внимание. Чтобы ваше приложение было безопасным, всегда используйте явное намерение при запуске службы и не объявлять фильтры намерений для вашего Сервисы. Использование неявного намерения запуска службы - это безопасность поскольку вы не можете быть уверены в том, какая служба будет реагировать на и пользователь не может видеть, какая служба запускается.