Mam dwie aplikacje zainstalowane w urządzeniu, każdy z komponentu usługi w nim i te dwie usługi ma taką samą deklarację filtra intencji, tak:dwie usługi z tym samym filtrem zamiarem
<intent-filter>
<action android:name="com.example.intent.action.SHOW"/>
</intent-filter>
I zacznę usługa w ten sposób:
Intent intent = new Intent();
intent.setAction("com.example.intent.action.SHOW");
startService(intent);
Okazało się, że jeden z tych dwóch usług rozpoczęty, ale nie jestem pewien, jak to happened.As wiemy, czy piszemy dwie czynności z tym samym oświadczeniem filtra intencji, pojawi się okno dialogowe i pozwoli użytkownikowi wybrać działanie, aby ukończyć Akcja, która mnie wprawiła w zakłopotanie, to to, jak Android wybiera usługę do uruchomienia w tych, którzy mają te same filtry zamiarów, jaka jest strategia podejmowania tej decyzji?
Z góry dziękuję!
zmiana:
Yury ma rację, tutaj jest fragment kodu z ram/base/usługi/java/com/android/server/PM/PackageMangerService.java na 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;
}
Jak widzimy , jeśli więcej niż jedna usługa jest zgodna z zamierzonym intencją, Android wybierze dowolną opcję, aby rozpocząć. Ale, która usługa zostanie uruchomiona, jest niespodziewana.
Spróbuj przez own.Create projektu, tworząc dwie usługi samym intent.You automatycznie zobaczyć co się dzieje. Więc spróbuj tego kolego – Sameer