Intent
只要這些組件正在運行,對象將永久地附加到Activity
,Service
和其他組件。他們不會因爲你離開另一個應用程序而離開。其原因是因爲Android可能會隨時終止進程,但用戶可能仍然想回去繼續他們正在做的事情。這使Intents成爲存儲或傳輸小型(有時甚至是大量)信息的理想之選,通過Extras。
onNewIntent()
方法專門用於處理更持久的應用程序組件,因此可能會在其LifeCycle期間多次調用它,但需要跟蹤它被調用的原因(以及因此調用的數據) 。無論您是否撥打setIntent()
取決於您需要做什麼。
如果您不在乎它爲什麼被隨後調用,您可以通過不致電setIntent()
保留原始Intent
。當你的Activity
(或其他組件)執行相同的事情時,無論是誰調用它以及它提供了什麼數據,這都是特別有用的。
如果您有需要分別回覆每個事件,那麼您必須至少存儲新的Intent
的信息。這意味着您可以避開setIntent()
,但是,除非您直接將它們發送給它們,否則它鏈接到的任何組件都不會有任何Intent
信息。對於不能保證原始的Intent
被完全處理的應用程序,這可能是期望的行爲。
如果您需要分別回覆每個意向並且原始Intent
沒有關係,那麼您使用setIntent()
。這丟棄原來的Intent
,它仍然在那裏...並放置新的Intent
,以便如果用戶離開(又一次),他們會回到同一個地方。
super.onNewIntent()
不處理這個問題的原因是因爲核心組件類不能確定新的Intent
比舊的更重要。它所關心的是它有和Intent
,而不是它是什麼。這就是爲什麼我們重寫這些方法的原因,所以我們確定什麼是重要的,什麼不重要。一般的感覺是像Activity
這樣的基類可以以任何方式使用我們擁有的任何數據(除非我們重寫並另外說明)。但是,除非我們特別告訴他們,否則他們不應(也往往不能)擺脫我們的數據。 這是你真的不想和一些程序員在一起的觀點。呵呵
希望這會有所幫助。
我真的很感激這個答案。現在我的目的非常明確。乾杯! – w3bshark