2012-06-13 56 views
5

這是一個相當陳舊的問題,但坦率地說,我還沒有找到它滿足我的好奇心的方式回答。尋求laymans解釋待定意圖概念

在此之前,親愛的讀者,請跳至android開發人員參考資料中粘貼文本,請注意,我已閱讀Intent/Pending Intent文檔,但尚未解決我的疑惑。

這讓我覺得意圖模型是android系統的核心,因此非常通用。正因爲如此,我所看到的使用例子往往是多種多樣的。這種變化混淆了我嘗試學習的概念,令人沮喪。

我的問題很簡單,但可能很難用簡單的術語來解釋。我明白,一個意圖是給其他活動的信息,其他活動可以聲明他們的興趣。等待意圖,意圖包裝,迷惑我。

  1. 我看到涉及權限和令牌的文檔。我明白了,但爲什麼作爲一個單獨的實體需要掛起的意圖 - 它啓用了什麼行爲?
  2. 未決意圖導致什麼活動/任務生命週期行爲?
  3. 何時需要廣播接收器?
  4. 什麼是廣播接收機的限制?

我意識到這些都是嚴重的新問題(我是),但我非常想理解這些核心概念,所以我不必依賴示例/指南/官方文檔。

歡迎任何反饋意見的人。謝謝。

回答

2

PendingIntent的主要目的是爲另一個應用程序提供書面許可,以代替您執行某些操作。基本上,這些應用受限於以下兩個因素:

  • 可見性。沒有提供公開可見(或任何)意圖過濾器的組件(如「服務」或「活動」)不能由其他應用程序調用。它們只能由您的應用程序使用指定其包和類名稱的顯式意圖來調用。
  • 權限。每個應用程序都可以請求一定數量的權限。這些大多是預定義的權限,但您也可以選擇定義自己的權限,儘管我從未使用過這些權限。您的應用程序無法執行超出這些權限的任何操作。

現在,未決意圖,你能過去兩個那些限制,如果所需的權限和知名度做一些應用程序明確允許做到這一點在她的代替。例如,一個應用程序可以允許你調用她的私人活動之一,如果它給你一個待定的意圖,包含明確的活動意圖。

它們與警報管理器一起使用,例如。它通過給它一個(等待中的)意圖告訴警報管理器什麼和何時做。由於您的應用程序在時間到達時可能不會再出現,警報管理器將不得不爲您發送它。這意味着這些意圖只能做到警報管理員允許做的事情,而不是你的應用程序允許做的事情。如果警報管理員被允許簡單地做任何事情,每個應用程序都可以通過使用警報管理器作爲代理來做任何事情。因此,您必須使用待定意圖,特別授予警報管理員針對您的特定意圖所需的權利。[/編輯]

除此之外,與常規意圖沒有太大差別,至少就用法而言。它確實會因粘性意圖等原因而變得複雜一些,但至少就我所知,這是它的一般要義。

當您想要對某些system events或其他應用程序的事件做出反應時,需要廣播接收器。廣播接收器是不可見的,它不會創建任何形式的視圖,也不涉及任何形式的用戶交互。優點是,無論您的應用程序(或者說您的活動)是否正在運行,都會發生這種情況。

一個廣播接收器只被授予約10秒鐘的時間才能完成,之後它被系統殺死。因此,如果您想要執行任何類型的長時間運行的流程,您必須使用後臺服務,或者打開一個活動讓用戶執行任務。

+0

優秀的寫作。現在我對這個概念更加自信。感謝您的快速回答。 – Gusdor