Android學習札記34:看到的一種對Activity間使用Parcel傳遞數據的解釋

Parcel,翻譯過來就是“打包”的意思。打包乾什麼呢?是爲了序列化。


如果要在進程之間傳遞一個整數,很簡單,直接傳就行了;


如果要傳遞一個字符串,就稍微複雜了點:需先分配一塊可以容納字符串的內存,然後將字符串複製到內存中,再傳遞。新手可能問:爲啥不直接把字符串的引用傳過去呢?學過C/C++的地球人都知道,進程都有自己的內存地址空間,一個進程中的1000地址可能在另一個進程中是100000,Java對象的引用從根本上說還是內存地址;


再如果要傳遞一個類的實例呢?也是先爲類分配內存,然後複製一份再傳遞可以嗎?我認爲不可以,我至少可以找到一個理由:類中成員除了屬性還有方法,即使屬性能完整傳過去,但還有方法呢?方法是獨立於類對象存在的,所以到另一個進程中再引用同一個方法就要出錯了,還是因爲獨立地址空間的原因。


Android開發中,很經常要在各個Activity之間傳遞數據,而按照Android的設計架構,即使同一個程序中的Activity都不一定運行在同一個進程中,所以處理數據傳遞時你不能老假設兩個Activity都運行於同一進程,那麼只能按照進程間傳遞數據來處理,使之具有最廣泛的適應性。


那麼到底如何才能在進程之間傳遞類對象呢?簡單來說可以這樣做:在進程A中把類中的非默認值的屬性和類的唯一標誌打成包(這就叫序列化),把這個包傳遞到進程B,進程B接收到包後,根據類的唯一標誌把類創建出來,然後把傳來的屬性更新到類對象中,這樣進程A和進程B中就包含了兩個完全一樣的類對象。


轉載自:

http://www.cnblogs.com/davidsmith/archive/2012/02/29/2373689.html







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章