首先,這個問題可能聽起來真的很荒謬的一些Android的老兵但作爲一個新手,我真的要問這樣一個問題:
一個Intent
是承載從一個Activity
到另一個信息被動的數據結構。 Intent
也能夠以名稱 - 值對的形式保存數據(通過putExtra()
)。
雖然覆蓋onCreate()
方法,我們傳遞一個Bundle
作爲參數,它最終也以名稱 - 值對的形式保存值,並且能夠藉助onSaveInstanceState()
存儲信息。
在這樣的情況下,我們爲什麼需要兩者兼而有之,並區分兩者?
UPDATE
我想我領你們到我誤解了Intent
是什麼misbelief:
當我說「一個Intent
是一種被動的數據結構,從一個Activity
攜帶信息到另一個「,我打算指出的是,在putExtra()
方法的幫助下,即使是Intent
也可以攜帶信息(上下文和動作描述除外)。爲什麼我們需要使用Bundle
呢?
此外,請確保您在下面的評論中留下原因,以防止您投下/投票表決問題。感謝慷慨。Bundle和Intent有什麼區別?
回答
我真的不從哪裏得到這個定義Intent知道,但作爲一個「意圖」的定義
的意圖是操作的抽象描述進行。 它可以與startActivity一起使用來啓動一個活動, broadcastIntent將其發送給任何感興趣的BroadcastReceiver組件,並將startService(Intent)或bindService(Intent, ServiceConnection,int)與後臺Service進行通信。
Intent提供了一種工具,用於在不同應用程序中的代碼之間執行後期運行時綁定 。其最重要的用途是 正在開展活動,它可以被認爲是活動之間的膠水。它基本上是一個被動數據結構,其中包含一個要執行的動作的抽象描述。
所以意圖是要鏈接到新的(活動,服務,廣播接收器)
在Intent你會發現額外
額外定義的行爲 - 這是一個Bundle的任何額外信息。這可以用來爲組件提供擴展信息。例如,如果我們有一個發送電子郵件的動作,我們也可以在這裏包含額外的數據以提供主題,主體等。
因此,這意味着在Intent附加是一束
一個目的要Bundle正如你所提到它是從一個意向另一個用於數據載體和是地圖上Key-Value
變量。
我想你已經明白Bundle
是什麼了:鍵值對的集合。
但是,意圖更多。它包含有關應執行的操作的信息。這個新操作由它可以使用的操作以及它應該顯示/編輯/添加的數據來定義。系統使用此信息爲請求的操作找到合適的應用程序組件(活動/廣播/服務)。
將意圖看作一個Bundle,其中還包含誰應該接收包含的數據以及應該如何呈現的信息。
更新了這個問題。對不起之前的不適當的描述。回答你的答案,但這就是我想要問的問題 - 「爲什麼我們需要一個'Bundle',當我們已經具有與'Intent'相同的功能?「 – ikartik90
因爲您有時需要一組沒有預定義意義的鍵值對,這些意向字段具有這樣的含義。您經常需要某種字典在與開始操作無關的地方任何方式。 –
意圖促進組件之間的通信.Intent是組件之間傳遞的消息,如活動。 可以使用intent.putExtra(鍵,值)和intent.putExtra(束)
Intent intent = new Intent();
intent.setClass(this, Other_Activity.class);
// intent.putExtra(key,value)
intent.putExtra("EXTRA_ID", "SOME DATAS");
startActivity(intent);
使用軟件包:
Bundle bundle=new Bundle();
bundle.put(key,value);
intent.putExtra(bundle);
startActivity(intent);
呼叫束在另一個活動:
Bundle extras=getIntent().getExtras();
extras.getString(key);
來自意圖類,兩者之間真的沒有區別。檢查下面的代碼Intent類:
public Intent putExtra(String name, String value) {
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putString(name, value);
return this;
}
而且
public Intent putExtras(Bundle extras) {
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putAll(extras);
return this;
}
所以我認爲,唯一的區別是易用性的.. :)爲1,您不需要創建包明確。
- 1. 「bundle update」和「gem update」有什麼區別?
- 2. Bundle Identifier和Product Bundle Identifier有什麼區別?
- 3. 'bundle exec rake'與rake有什麼區別?
- 4. Android - 在onCreate中收到的getArguments和Bundle有什麼區別
- 5. 我使用的是RVM,使用bundle install和rvm bundle install有什麼區別?
- 6. 有什麼區別`和$(Bash中有什麼區別?
- 7. 有什麼區別? :和||
- 8. &&和||有什麼區別?
- 9. 「/」和「/ *」有什麼區別?
- 10. 有什麼區別:。!和:r!?
- 11. ==和===有什麼區別?
- 12. Appender和〜有什麼區別?
- 13. $ @和$ *有什麼區別?
- 14. is和=有什麼區別?
- 15. #.00和#。##有什麼區別?
- 16. `==`和`is`有什麼區別?
- 17. '=='和'==='有什麼區別?
- 18. /和/#/有什麼區別?
- 19. | 0和~~有什麼區別?
- 20. `&`和`ref`有什麼區別?
- 21. ==和===有什麼區別?
- 22. ==和===有什麼區別?
- 23. `{}`和`[]`有什麼區別?
- 24. JavaScript和=== ===有什麼區別?
- 25. difftime和' - '有什麼區別?
- 26. =和==有什麼區別?
- 27. bundle和gem install的區別?
- 28. Android開發中Bundle和JSONObject的區別是什麼?
- 29. xtype和別名有什麼區別?
- 30. Mixpanel:識別()和people.identify()有什麼區別?
閱讀本文http://stackoverflow.com/questions/4999991/what-is-a-bundle-in-an-android-application#autocomment35012928 – user
上面的鏈接錯過了這個問題的觀點,這是爲了區分數據以Intent傳遞,數據以Bundle傳遞。如果你來到這裏,你已經訪問過這個鏈接。 –