2010-09-08 24 views
0

我只是一個初學者到Android,但我已經注意到了一些事情,似乎在第三記事本教程有些奇怪:Android Notepadv3教程 - saveState()在onSaveInstanceState中真的有必要嗎?

  • 教程明確指出,需要從兩個的onSaveInstanceState和的onPause調用saveState和。這真的有必要嗎?在我看來,通過閱讀進程生命週期文檔,在活動被終止之前總是會調用onPause,而不管系統或用戶是這樣做的。如果是這樣,肯定只需從onPause調用saveState就足夠了?
  • 在onResume和onCreate中調用populateFields()毫無意義,因爲onResume總是在onCreate之後調用。因此,如果我理解正確,onCreate中的調用沒有任何用處,可以安全地刪除。

可能有人請要麼確認這些點,或讓我知道我有誤解。

奧利

+0

另外,這個例子中的onResume方法不是完全沒有意義的嗎?根據生命週期文檔,一個已暫停的Activity保留了它的所有狀態,那麼當它沒有被使用時(假設它們不能在別處改變),重新填充這些字段有什麼意義呢? – Olly 2010-09-08 21:16:21

+0

一個很常見的模式是呈現一個列表視圖,當一個行被點擊時,一個新的活動被打開以允許編輯被點擊的項目。發生這種情況時,您需要在onResume期間刷新數據,以便列表視圖反映這些更改。乍一看這個例子,看起來他們實際上是從數據庫中檢索可能已被修改的數據。更有可能他們不需要在onCreate中調用populateFields(),但他們確實需要將它放在onresume中。 – Mike 2010-09-08 21:40:54

+0

在onCreate中放入populateFields()調用而不是在onResume中是不夠的?沒有任何情況(據我所知),當這個活動暫停時底層數據可以改變的地方,因此每次活動沒有被暫停時都不需要加載它。 – Olly 2010-09-08 22:02:15

回答

0

從我的理解......

你是正確的onResume始終的onCreate後最終調用,你可以經常把代碼存在。請記住,雖然onResume也會在活動回到前臺時被調用,而不會先通過onCreate。因此,對於一次初始化代碼(如setContentView()或初始化變量),onCreate事件是一個更好的地方。

另外,您對onPause和onStop是正確的。 onPause是你通常編寫狀態處理代碼的地方。 onPause是可用的,這樣onStop可能甚至在非常低的內存情況下甚至不會被調用。

+0

哎呀,我只是注意到你指的onSaveInstanceState不onStop(不知道我怎麼跑到那裏,抱歉)。他們的例子是正確的。雖然savestate有時會被調用兩次,但他們需要在onSaveInstanceState中調用它以獲取要添加到捆綁的新數據的ID,並在onPause(在未調用onSaveInstanceState的情況下)以確保數據是至少保存。 – Mike 2010-09-08 21:46:46

+0

啊 - 忽略我以前的帖子here..talking垃圾:)。謝謝。 – Olly 2010-09-08 21:58:58

+0

由onSaveInstanceState調用的saveState修改mRowId,然後將其放入onSaveInstanceState中的下一行。雖然該rowid在技術上是持久的,因爲它在數據庫中,但它們在那裏使用它的方式並非如此。在那裏他們正在使用它來知道正在顯示哪個筆記。但是,這就是爲什麼他們也會在onPause事件中調用saveState。那時他們不關心顯示哪個ID,但是數據被保存並且不會丟失。由於onSaveInstanceState可能不會被調用,所以他們也必須從onPause調用它。 – Mike 2010-09-08 22:06:52

相關問題