2016-07-26 24 views

回答

1

讓我試着refrace上面的句子來clerify這意味着什麼:

注意:爲避免無意中運行不同的應用程序的服務,請務必使用明確意圖,開始自己的服務...

當您廣播一個隱含的意圖時,Android會檢查哪些應用程序已註冊以接收此意圖。多個應用程序可以註冊到相同的意圖,在這種情況下,如果您的意圖是隻啓動您自己的服務,並且另一個服務註冊到相同的意向操作,Android可能會啓動其他服務並忽略您的意圖。

總是使用明確的意圖來啓動您自己的服務,並且不要爲您的服務聲明意圖過濾器。

爲了避免上述情況,Android允許以明確的Intent啓動您的服務。在您明確的意圖中,您提供了需要啓動的確切的軟件包名稱和服務類別。這使得Android可以精確定位您的服務並啓動它,而不會將其與設備上可能安裝的其他服務混淆。此外,當使用明確的Intent時,您不需要爲該Intent註冊一個Intent過濾器,因爲Android完全知道該做什麼以及開始哪個Service,因爲所有需要的信息都封裝在Intent中。

這是一個明確的意圖的一個例子:

Intent downloadIntent = new Intent(this, DownloadService.class); 
downloadIntent.setData(Uri.parse(fileUrl)); 
startService(downloadIntent); 

當你創建你通過傳遞「這個」作爲一個參數提供您的應用程序(進程)的背景下的意圖。另外,您傳遞服務的確切類名稱(DownloadService.class)。現在,Android確切知道要啓動哪個服務,並且不會與多種選擇混淆。

+0

thnx @Dudu,我對「總是使用明確的意圖開始你自己的服務」有清晰的瞭解,但是「不要爲你的服務聲明過濾器」我沒有得到這個。 – sam08

+0

如果您僅使用Intent過濾器從應用程序中啓動服務,則不鼓勵其他應用程序可能廣播相同的意圖操作並錯誤地啓動服務。另一方面,如果您的服務應該由其他應用程序啓動並且提供公開可用的功能,那麼您可以通過一切方式註冊一個意圖過濾器,並且它將完全正常。 –

+0

謝謝@杜都,我明白了 – sam08

0

因爲有可能啓動屬於某個其他應用程序並具有相同意圖過濾器的服務。

用戶可以在他的設備上安裝另一個應用程序(可能多於一個),該應用程序可以使用相同的意圖過濾器提供服務。如果您發送廣播意圖試圖運行您的服務,您可以意外運行此應用程序的服務。

+0

謝謝@Edonoxako。爲什麼我不能使用decalare意圖過濾器? – sam08