如果我使用setArgs和getArgs將一個包從MyActivity傳遞到MyFragment。我不能通過MyFragment構造函數傳遞數據對象嗎?所有這些捆綁包都有什麼意義?速度更快嗎?Android中的捆綁包有什麼意義?
旁邊的問題:當我傳遞包裹時,他們是否有別名?所以編輯這個包會改變一切?
如果我使用setArgs和getArgs將一個包從MyActivity傳遞到MyFragment。我不能通過MyFragment構造函數傳遞數據對象嗎?所有這些捆綁包都有什麼意義?速度更快嗎?Android中的捆綁包有什麼意義?
旁邊的問題:當我傳遞包裹時,他們是否有別名?所以編輯這個包會改變一切?
需要該包來管理片段的生命週期,並允許OS再次創建對象。這裏的其他信息docs
budnles的大不了是他們在應用程序之間工作。這使得可以運行瀏覽器,例如在應用程序中編程的網站。如果您在通過構造函數傳遞數據的同時啓動瀏覽器,那麼瀏覽器窗口將與您開始運行它的應用程序在相同的線程中運行。捆綁和意圖使操作系統更安全。
和我不認爲它們是別名,並且一旦意圖被髮送,添加到它的信息將在接收端保持不變。 – TanevanWifferen
爲什麼downvotes?我錯了嗎? – TanevanWifferen
嗯,我認爲這需要一些介紹:
如果活動或片段將f.e.摧毀他們的狀態將被保存。因此,系統必須保存該狀態才能重新創建它。最好的做法是將其保存爲一個字節代碼,其中包含重建定義此狀態的對象所需的全部信息。通過使用字節碼,它與這些對象的類型無關。將對象轉換爲字節碼稱爲序列化。
Android有它自己的序列化機制,稱爲Parcelable。它比默認情況下Java提供的序列化要快得多,因此它應該是Android中使用的首選方式。
現在,Bundle只採用實現Parcelable或Serializable接口的對象和基元。它們用於保存在一個地方定義活動/片段狀態的不同對象。
因爲您可以傳遞給Fragment的參數也會被系統序列化以備將來使用,所以需要Bundle。這就是爲什麼Fragment應該只使用非參數構造函數並通過參數傳遞參數的原因。
簡而言之:系統使用Bundle保存並重新創建活動或片段的狀態。因此,系統使用這種容易讀取的數據的格式,即字節碼。
[Android應用程序中的「bundle」是什麼)的可能重複(http://stackoverflow.com/questions/4999991/what-is-a-bundle-in-an-android-application) –
@SteveBenett它不是重複的,因爲問題不是什麼捆綁包,而是它與片段參數有關 – greywolf82
實際上http://stackoverflow.com/questions/10450348/do-fragments-really-need-an-empty-constructor –