2011-12-05 52 views
13

我有我的設備上安裝了兩個應用程序,每個組中的服務成分和這兩種服務具有相同的意圖過濾器的聲明,就像這樣:兩個服務具有相同意圖過濾

<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); 

我發現,這兩個服務的一個開始,但我不知道該怎麼happened.As我們知道,如果我們寫兩個活動具有相同意圖過濾器的聲明,一對話框將被強化,讓用戶選擇一個活動來完成action.What讓我感到困惑的是,Android如何選擇在具有相同意圖過濾器的這些人中開始的服務,做出這個決定的策略是什麼?

在此先感謝!

更新:
尤里是正確的,這裏是從框架/基/服務/ JAVA/COM /安卓/服務器/ 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會隨意選擇一個啓動。但是,實際開始的服務是意想不到的。

+0

你own.Create項目,形式試一試兩個服務具有相同intent.You會自動看看會發生什麼。所以試試看好友 – Sameer

回答

8

如果有超過1個服務具有相同的意圖過濾器,那麼Android操作系統會隨機選擇其中一個服務並將意圖傳遞給它。

+0

感謝您的回答,這非常有價值。 – CalvinLee

相關問題