Parcel,翻譯過來是“打包”的意思。打包干什麼呢?是為了序列化。
如果要在進程之間傳遞一個整數,很簡單,直接傳就是行了;如果要傳一個字符串,就稍微復雜了點:需先分配一塊可以容納字符串的內存,然後將字符串復制到內存中,再傳遞(新手可能問:為啥不直接把字符串的引用傳過去呢?學過C/C++的地球人都知道:進程有自己的內存地址空間,一個進程中的1000地址可能在另一個進程中是100000,java對象的引用跟本上還是內存地址);再如果要傳遞一個類的實例呢?也是先為類分配內存,然後復制一份再傳遞可以嗎?我認為不可以,我至少可以找到一個理由:類中成員除了屬性還有方法,即使屬性能完整傳過去,但還有方法呢?方法是獨立於類對象存在的,所以到另一個進程中再引用同一個方法就要出錯了,還是因為獨立地址空間的原因。
Android開發中,很經常在各activity之間傳遞數據,而跟據Android的設計架構,即使同一個程序中的Activity都不一定運行在同一個進程中,所以處理數據傳遞時你不能老假設兩個activity都運行於同一進程,那麼只能按進程間傳遞數據來處理,使之具有最廣泛的適應性。
那麼到底如何在進程之間傳遞類對象呢?簡單來說可以這樣做:在進程A中把類中的非默認值的屬性和類的唯一標志打成包(這就叫序列化),把這個包傳遞到進程B,進程B接收到包後,跟據類的唯一標志把類創建出來,然後把傳來的屬性更新到類對象中,這樣進程A和進程B中就包含了兩個完全一樣的類對象。
下一篇再具體講Parcel吧,見 http://www.linuxidc.com/Linux/2012-02/53484.htm