2014-04-04 63 views
0

我是Android的新手,當我搜索發送短信的代碼時,我發現他使用了一個未決的意圖並開始學習它,我研究了它被第三方應用程序用來啓動意圖,並且它也採取行動在未來,但我不明白這些工作如何?無論如何,將來每當一個掛起的意圖被調用時,它會調用一個意圖,所以爲什麼我們不直接去意圖?爲什麼我不能去意圖而不是等待意圖?

我希望這個問題是清楚的,所以如果可能的話請給我一份有意向的工作和即將意向請dont't解釋我再次定義的例子....

回答

1

爲什麼我不能去意圖而不是等待意圖?

您需要提供PendingIntent的原因,而不是Intent

1)讓我們假設你爲了使該應用程序會以某種方式使用它(例如給其它應用程序中Intent - 系統通知管理器是另一種應用)。現在想想看 - 如果這個應用程序知道這個意圖是爲了啓動Activity還是打算開始Service或發送brodcast?回答:它不能!你可能會認爲它可以基於類參數知道,但不要忘記,它也可能啓動implicit Activities /服務!

結論:其他應用程序無法知道該Intent的具體內容,但不知道它打算如何處理。這就是爲什麼在創建PendingIntent時使用getBroadcast()getActivity()getService()方法創建PendingIntent的原因。

這是PendingIntent的全部內容之一:封裝Intent +如何處理它。

2)讓我們假設一段時間後,你想提供給另一個應用Intent。現在,有2個選項:

  • 新的意圖應該替換您提供
  • 新的意圖不應該取代以前的前一個..

將如何接收應用程序就知道了哪一個來自兩個?

回答:掛起的意圖由系統持有並創建,並通過向另一個相同的請求代碼提供掛起的意圖filter equal - 將自動替換上一個而不創建新的。 3)讓我們假設對意圖的引用是由應用程序直接保存和創建的,而不是由系統(如我在'2'中寫的)創建的。現在想象一下這樣的場景:

3.1)您的應用程序創建的意圖對象

3.2)應用程序到另一個applciation

3.3)你的應用程序從某種原因

停止提供參考這一意圖對象3.4)WTF應該發生?引用由另一個應用程序保存的應用程序對象?這對GC來說是一團糟。系統無法釋放您的進程內存分配!

這是場景掛起的意圖實例背後的第二個原因,它只由系統持有,而不是由您的特定應用程序持有。

,如果它是不夠的 - 而且也有安全的,我不打算寫你的使用示例中的問題...

,因爲任何谷歌搜索的PendingIntent turorial會用很好的例子色調效果,無論如何 - 對於特定的用例,代碼會有所不同...

+0

我喜歡你解釋事物的方式,但坦率地說我無法理解一些場景,這不是你的敘述故障,因爲我在android中的知識有限,我剛開始使用android,所以我是一名新程序員,所以你能建議我如何在學習android的專業知識,我發現在android.developers網站很多信息,但我不明白他們的內容,所以你能以正確的方式引導我? –

+1

@srujanmaddula:在我的回答中,我假設你理解並知道android構建塊:Service,Activity,BroadcastReceiver和Intent。這是框架中最基本的重要組成部分。瞭解這些組件和生命週期可以讓你快速掌握android的專業知識。所以,我最好的建議是挖掘這些組件並理解它們。參考 - http://developer.android.com/guide/components/fundamentals.html –

0

主要區別在於,即使擁有的應用程序的PendingIntent進程被終止,PendingIntent本身仍然可以從其他進程使用。 如果稍後創建的應用程序重新獲取相同類型的PendingIntent,它將收到一個表示相同的PendingIntent,如果它仍然有效,並且還可以調用cancel()將其刪除(實際上是前一個)。