2011-05-26 33 views
14

大家好,我嘗試了意圖的2類之間的機器人傳球和我已經意識到有2種方法來傳遞意圖,getIntent()和從savedInstanceState獲取意圖有什麼區別?

一是採用getIntent方法在這裏:

Bundle extras = getIntent().getExtras(); 
mRowId = (extras != null) ? extras.getLong(DrugsDbAdapter.KEY_ROWID) : null; 

而且第二種方法是訪問savedInstanceState:

mRowId = (savedInstanceState != null) savedInstanceState.getLong(DrugsDbAdapter.KEY_ROWID) : null; 

在這兩種方法,我試圖訪問rowid的,我可以再使用fetchData。兩種方法有什麼區別?哪一個更好 ?

+3

你是否在第二種情況下獲得了rowId?我假設你不這樣做,因爲'savedInstanceState'是空的,除非你在'onSaveInstanceState'中放置了某些東西' – ernazm 2011-05-26 13:21:29

+0

對於記錄來說,第二種方法沒有得到或「傳遞意圖」。兩種方法都得到一個* Bundle *的鍵值對。據推測,這就是你的意思。 'getIntent()。getExtras()'給你類似於傳遞給構造函數的參數。 'savedInstanceState'更像是某個時刻保存的活動的狀態。 – LarsH 2017-10-23 17:33:14

回答

12

第一種情況爲您提供了開始此活動的意圖的附加項,而第二種情況在onCreate被調用了第二個或更多時間(例如,在設備旋轉中)時使用。該捆綁包應填充在onSaveInstanceState中。

+0

現在我試圖理解這一點 - 如果用戶旋轉屏幕,活動是否再次收到它在首次創建時收到的相同意圖? – leoneboaventura 2016-03-09 00:40:48

+0

getIntent()將返回相同的目標和相同的額外參數。但onSaveInstanceState的Bundle參數是另一回事。 – ernazm 2016-03-10 13:01:28

11

getIntent()是用來告訴你哪個Intent開始這個Activity。它可以在Activity的任何地方訪問。它有一個Bundle,但它也有其他元數據。

onSaveInstanceState(Bundle)傳遞給您一個Bundle,在您的應用程序中保存實例變量,直到下一次啓動。這Bundle只進來onCreate()onRestoreInstanceState(),它沒有其他數據。

+0

謝謝尼古拉斯! – jamen 2011-05-27 04:08:20