2017-08-23 23 views
3

基本上,它很清楚的區分的隱式和顯式意圖經由 setComponent(組件名稱)或setClass(上下文的Android -O - 困惑隱意向definiton的和顯式意圖

已指定的成分

顯式意圖( ,Class)),其中 提供了要運行的確切類。通常這些將不包括任何其他信息,僅僅是作爲用戶與 應用程序交互時應用程序啓動其所具有的各種內部活動的方式。

隱含意圖未指定組件;相反,它們必須包含足夠的信息以供系統確定哪個可用組件最適合爲該意圖運行。

但我通過谷歌的https://developer.android.com/about/versions/oreo/background.html#broadcasts

例如引入混淆,ACTION_PACKAGE_REPLACED一個隱含的廣播,因爲 將其發送到所有已註冊的聽衆,讓他們知道一些 包在設備上被替換。但是, ACTION_MY_PACKAGE_REPLACED不是一個隱含的廣播,因爲它是 只發送到其包已被替換的應用程序,無論有多少 其他應用程序已爲該廣播註冊偵聽器。

爲什麼ACTION_MY_PACKAGE_REPLACED不是一個隱含的廣播?

+1

「它只發送到包被替換的應用程序」 - 這意味着「Intent」被創建爲針對爲該廣播註冊的組件,並且它攜帶「ACTION_MY_PACKAGE_REPLACED」動作。顯式的'Intent's也可以有動作。 –

+0

是的,我知道明確的*意圖*也可以有行動,我的疑問是爲什麼ACTION_MY_PACKAGE_REPLACED被視爲顯式。 –

+0

你的意思是這個動作是由系統發送時指定的目標包嗎? –

回答

0

爲什麼ACTION_MY_PACKAGE_REPLACED不是隱式廣播?

因爲這就是Google編寫發送ACTION_MY_PACKAGE_REPLACED廣播的代碼的方式。他們創建一個明確的Intent,標識接收廣播的特定接收器。他們還附加了動作字符串,以防接收者碰巧接收到多個廣播並需要區分另一個廣播。歡迎有明確的Intent有一個操作字符串。隱式和顯式Intents之間的區別在於Intent是否標識組件。

+0

明白了,非常感謝。 –

1

ACTION_MY_PACKAGE_REPLACED是一種意圖,僅向您的應用程序廣播,因爲它只在您的應用程序被替換時觸發。這使得它是一個明確的意圖,因此不受限於Android O.

然而,ACTION_PACKAGE_REPLACED發送到每個應用程序,每當一個包被替換,因此它不是特定於您的應用程序。這是一個隱含的意圖,並因此在Android O的新背景規則下被禁止。