Android Activity間傳值選擇伐蒂,Serializable Or Parcelable

? 前言:Activity就是Android世界的controller褪子,它們構(gòu)成了Android App里面的每一個頁面,當然我們還會使用Fragment來將頁面進一步劃分轻抱,通過Fragment可以對特定業(yè)務(wù)模塊的View+邏輯封裝飞涂,讓其與Activity解耦,同時還可以有自己的生命周期祈搜,讓我們控制布局繪制和進行資源回收较店,這些都是Fragment的好處,以后有機會再談容燕,今天梁呈,我們想討論的是Activity頁面之間跳轉(zhuǎn)時,互相傳值的方法選擇蘸秘。

? 我們知道官卡,像int,long秘血,double等基本類型和String都可以直接使用Intent類提供的putExtra方法直接打包傳遞味抖,但很多時候,我們要傳遞的可能是一個實體類的對象灰粮,要傳遞一個實體類對象仔涩,有二種辦法,標記類實現(xiàn)Serializable接口 或者 添加代碼實現(xiàn)Parcelable接口粘舟,注意的是Serializable接口沒有任何實際方法需要實現(xiàn)熔脂,它只是一個標記,標記可以進行序列化柑肴。Serialiable是Java提供的序列化接口霞揉,它將對象按規(guī)則轉(zhuǎn)化為字節(jié)隊列,字節(jié)隊列可以進行網(wǎng)絡(luò)傳輸晰骑,這樣可以讓java的對象跨環(huán)境的進行傳輸适秩,序列化只能序列化成員變量,而靜態(tài)變量和方法不會被序列化,transient關(guān)鍵字修飾的變量也不會被序列化秽荞。Java中反序列化時通過SerialVersionUID來判斷是否能夠反序列化骤公,所以需要序列化的類最好都能給出一個固定的SerialVersionUID值,如下

而Parcelable是Android提供的接口扬跋,它主要是通過writeToParcel()阶捆,將需要持久化的字段保存到一個Parcel對象里面,然后通過CREATOR

從Parcel對象中钦听,取出相應(yīng)的字段洒试,完成對象的恢復(fù),很明顯這里Parcelable有它的優(yōu)勢朴上,需要保存哪些字段我們可以自由控制垒棋,因為寫接口暴露給我們了,需要恢復(fù)哪些字段余指,我們同樣可以控制捕犬,所以相對于Serializable跷坝,存儲的代價小很多酵镜,因為Serializable需要保存很多額外的字段來保證反序列化能夠成功。

? ? 現(xiàn)在我們還是通過一個具體的實例來介紹這二種Activity傳值的基本使用方法柴钻。假設(shè)淮韭,我們現(xiàn)在有一個商品Good的列表,Good類是這樣的

第一個需求是點擊列表的一個cell贴届,跳轉(zhuǎn)到Good的詳情頁靠粪,即我們需要將點擊對應(yīng)的Good對象傳遞到詳情Activity。第二個需求是點擊任何一個cell毫蚓,將全部的Good信息傳遞到詳情Activity占键,即傳遞一個Good數(shù)組。

我們先來看第一個需求元潘,先用Serializable的方法畔乙,發(fā)送很簡單

接收對象也很簡單

我們再來使用Parcelable接口來傳遞,先定義一個類ParcelableGood

發(fā)送數(shù)據(jù)也很簡單

接收也同樣類似

第一個需求很簡單就搞定了翩概,我們再來搞定第二個需求牲距,傳Good的數(shù)組給詳情Activity,如果使用Serializable的話钥庇,Intent沒有提供putExtra直接傳遞Good數(shù)組的重載方法牍鞠,所以我們需要做一個包裝類,我新建一個WrapGood類如圖

這樣就可以直接傳遞一個WrapGood评姨,間接達到傳遞Good數(shù)組的目的难述,

接收數(shù)據(jù)

因為Intent提供了putExtra方法直接傳遞Parcelable數(shù)組的重載,所以可以直接使用,

從Intent中取出Parcelable數(shù)組更簡單

? 現(xiàn)在為止Good里面的屬性都是基本類型或者String胁后,當然它的屬性也可以是另外一個實體類硫眯,假設(shè)是GoodExtra類,這個時候如果要用Serializable序列化择同,GoodExtra也必須要標記Serializable接口两入。如果要使用Parcelable,GoodExtra同樣要實現(xiàn)我們上面介紹的writeToParcel 和 CREATOR敲才。

? 最后我們來做一個總結(jié)裹纳,上面已經(jīng)介紹了在Android開發(fā)中Serializable和Parcelable的用法,我們推薦使用Parcelable紧武,理由大致有3個:1.Parcelable是Android 框架提供給我使用的剃氧,Google提供了比較好的接口和文檔支持,例如上面的putExtra阻星,就有對Parcelable數(shù)組的重載方法朋鞍。2. Parcelable效率更高,Parcelable底層實現(xiàn)是內(nèi)存的copy妥箕,速度很快滥酥,Serializable是IO操作,而且會用到反射畦幢,相對比較慢坎吻,國外有人測試過,Parcelable比Serializable從序列化到傳輸?shù)椒葱蛄谢畲校骄?0倍左右瘦真。3.最后一個原因也是最重要的原因,Parcelable要序列化哪些字段黍瞧,我們完全可以控制诸尽,而且還可以在其中加入各種轉(zhuǎn)換,修飾印颤,因為寫接口暴露給我們了您机,我們可以自由定制,而Serializable就顯的比較笨拙膀哲,而且需要一些額外的字節(jié)來存儲類的信息往产,當然Serializable使用起來要更簡單。這些都是它們在理論上的比較某宪,項目中絕大多數(shù)場景仿村,二者都可以完全勝任,具體用哪個兴喂,見仁見智吧~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蔼囊,一起剝皮案震驚了整個濱河市焚志,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌畏鼓,老刑警劉巖酱酬,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異云矫,居然都是意外死亡膳沽,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門让禀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挑社,“玉大人,你說我怎么就攤上這事巡揍⊥醋瑁” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵腮敌,是天一觀的道長阱当。 經(jīng)常有香客問我,道長糜工,這世上最難降的妖魔是什么弊添? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮啤斗,結(jié)果婚禮上表箭,老公的妹妹穿的比我還像新娘。我一直安慰自己钮莲,他們只是感情好,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布彼水。 她就那樣靜靜地躺著崔拥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪凤覆。 梳的紋絲不亂的頭發(fā)上链瓦,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天,我揣著相機與錄音盯桦,去河邊找鬼慈俯。 笑死,一個胖子當著我的面吹牛拥峦,可吹牛的內(nèi)容都是我干的贴膘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼略号,長吁一口氣:“原來是場噩夢啊……” “哼刑峡!你這毒婦竟也來了洋闽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤突梦,失蹤者是張志新(化名)和其女友劉穎诫舅,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宫患,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡刊懈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了娃闲。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片俏讹。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖畜吊,靈堂內(nèi)的尸體忽然破棺而出泽疆,到底是詐尸還是另有隱情,我是刑警寧澤玲献,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布殉疼,位于F島的核電站,受9級特大地震影響捌年,放射性物質(zhì)發(fā)生泄漏瓢娜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一礼预、第九天 我趴在偏房一處隱蔽的房頂上張望眠砾。 院中可真熱鬧,春花似錦托酸、人聲如沸褒颈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谷丸。三九已至,卻和暖如春应结,著一層夾襖步出監(jiān)牢的瞬間刨疼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工鹅龄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留揩慕,地道東北人。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓扮休,卻偏偏與公主長得像迎卤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子肛炮,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Android跨進程通信IPC整體內(nèi)容如下 1止吐、Android跨進程通信IPC之1——Linux基礎(chǔ)2宝踪、Andro...
    隔壁老李頭閱讀 11,860評論 6 38
  • 本文主要內(nèi)容 Activity的生命周期、通信方式碍扔、Intent Filter 【Activity】一個Activ...
    cxm11閱讀 709評論 0 0
  • 剛學(xué)JS的DOM操作時瘩燥,就知道了匹配一堆元素,會獲得NodeList和HTMLCollection這兩個對象不同,不過...
    oopsist閱讀 2,354評論 0 2
  • 牛奶 雞蛋 香蕉 紅薯 桃仁 粗糧 蛋白質(zhì) 膳食纖維 堅果
    Mehere閱讀 200評論 0 2
  • 當下厉膀,人們都熱衷于來一場說走就走的旅行。有人選擇國內(nèi)游二拐,有人選擇出境游服鹅,還有人是選擇窮游。 每當朋友心情不好時百新,她...
    isabellaLilove閱讀 423評論 0 0