У меня на моем устройстве установлено два приложения, каждый из которых содержит компонент службы, и эти две службы имеют одно и то же объявление фильтра намерений, например:
<intent-filter>
<action android:name="com.example.intent.action.SHOW"/>
</intent-filter>
И я запускаю сервис таким образом:
Intent intent = new Intent();
intent.setAction("com.example.intent.action.SHOW");
startService(intent);
Я обнаружил, что одна из этих двух служб началась, но я не знаю, как это произошло. Как мы знаем, если мы напишем два действия с тем же объявлением фильтра намерений, откроется диалоговое окно и позволит пользователю выбрать чтобы завершить действие. Что меня смутило, так это то, как Android выбирает услугу, которая будет запущена в тех, у кого есть те же фильтры намерений, что и стратегия принятия этого решения?
Спасибо заранее!
обновление:
Юрий прав, вот фрагмент кода из фреймворков /base/services/java/com/android/server/pm/PackageMangerService.java на ICS:
public ResolveInfo resolveService(Intent intent, String resolvedType,
int flags) {
List<ResolveInfo> query = queryIntentServices(intent, resolvedType,
flags);
if (query != null) {
if (query.size() >= 1) {
// If there is more than one service with the same priority,
// just arbitrarily pick the first one.
return query.get(0);
}
}
return null;
}
Как мы видим, если есть несколько сервисов, соответствующих запрошенному намерению, Android будет произвольно выбрать один для запуска. Но, какая служба будет фактически запущена, неожиданно.