版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】Android中如何使用Parcelable接口
Android中如何使用Parcelable接口,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面在下將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
AndroidParcelable接口使用方法詳解1.Parcelable接口InterfaceforclasseswhoseinstancescanbewrittentoandrestoredfromaParcel。ClassesimplementingtheParcelableinterfacemustalsohaveastaticfieldcalledCREATOR,whichisanobjectimplementingtheParcelable.Creatorinterface。2.實(shí)現(xiàn)Parcelable就是為了進(jìn)行序列化,那么,為什么要序列化?1)永久性保存對(duì)象,保存對(duì)象的字節(jié)序列到本地文件中;2)通過(guò)序列化對(duì)象在網(wǎng)絡(luò)中傳遞對(duì)象;3)通過(guò)序列化在進(jìn)程間傳遞對(duì)象。3.實(shí)現(xiàn)序列化的方法Android中實(shí)現(xiàn)序列化有兩個(gè)選擇:一是實(shí)現(xiàn)Serializable接口(是JavaSE本身就支持的),一是實(shí)現(xiàn)Parcelable接口(是android特有功能,效率比實(shí)現(xiàn)Serializable接口高效,可用于Intent數(shù)據(jù)傳遞,也可以用于進(jìn)程間通信(IPC))。實(shí)現(xiàn)Serializable接口非常簡(jiǎn)單,聲明一下就可以了,而實(shí)現(xiàn)Parcelable接口稍微復(fù)雜一些,但效率更高,推薦用這種方法提高性能。注:Android中Intent傳遞對(duì)象有兩種方法:一是Bundle.putSerializable(Key,Object),另一種是Bundle.putParcelable(Key,Object)。當(dāng)然這些Object是有一定的條件的,前者是實(shí)現(xiàn)了Serializable接口,而后者是實(shí)現(xiàn)了Parcelable接口。4.選擇序列化方法的原則1)在使用內(nèi)存的時(shí)候,Parcelable比Serializable性能高,所以推薦使用Parcelable。2)Serializable在序列化的時(shí)候會(huì)產(chǎn)生大量的臨時(shí)變量,從而引起頻繁的GC。3)Parcelable不能使用在要將數(shù)據(jù)存儲(chǔ)在磁盤(pán)上的情況,因?yàn)镻arcelable不能很好的保證數(shù)據(jù)的持續(xù)性在外界有變化的情況下。盡管Serializable效率低點(diǎn),但此時(shí)還是建議使用Serializable。5.應(yīng)用場(chǎng)景需要在多個(gè)部件(Activity或Service)之間通過(guò)Intent傳遞一些數(shù)據(jù),簡(jiǎn)單類型(如:數(shù)字、字符串)的可以直接放入Intent。復(fù)雜類型必須實(shí)現(xiàn)Parcelable接口。6、Parcelable接口定義public
interface
Parcelable
{
//內(nèi)容描述接口,基本不用管
public
int
describeContents();
//寫(xiě)入接口函數(shù),打包
public
void
writeToParcel(Parcel
dest,
int
flags);
//讀取接口,目的是要從Parcel中構(gòu)造一個(gè)實(shí)現(xiàn)了Parcelable的類的實(shí)例處理。因?yàn)閷?shí)現(xiàn)類在這里還是不可知的,所以需要用到模板的方式,繼承類名通過(guò)模板參數(shù)傳入
//為了能夠?qū)崿F(xiàn)模板參數(shù)的傳入,這里定義Creator嵌入接口,內(nèi)含兩個(gè)接口函數(shù)分別返回單個(gè)和多個(gè)繼承類實(shí)例
public
interface
Creator<T>
{
public
T
createFromParcel(Parcel
source);
public
T[]
newArray(int
size);
}
}7、實(shí)現(xiàn)Parcelable步驟1)implementsParcelable2)重寫(xiě)writeToParcel方法,將你的對(duì)象序列化為一個(gè)Parcel對(duì)象,即:將類的數(shù)據(jù)寫(xiě)入外部提供的Parcel中,打包需要傳遞的數(shù)據(jù)到Parcel容器保存,以便從Parcel容器獲取數(shù)據(jù)3)重寫(xiě)describeContents方法,內(nèi)容接口描述,默認(rèn)返回0就可以4)實(shí)例化靜態(tài)內(nèi)部對(duì)象CREATOR實(shí)現(xiàn)接口Parcelable.Creatorpublic
static
final
Parcelable.Creator<T>
CREATOR注:其中publicstaticfinal一個(gè)都不能少,內(nèi)部對(duì)象CREATOR的名稱也不能改變,必須全部大寫(xiě)。需重寫(xiě)本接口中的兩個(gè)方法:createFromParcel(Parcelin)實(shí)現(xiàn)從Parcel容器中讀取傳遞數(shù)據(jù)值,封裝成Parcelable對(duì)象返回邏輯層,newArray(intsize)創(chuàng)建一個(gè)類型為T(mén),長(zhǎng)度為size的數(shù)組,僅一句話即可(returnnewT[size]),供外部類反序列化本類數(shù)組使用。簡(jiǎn)而言之:通過(guò)writeToParcel將你的對(duì)象映射成Parcel對(duì)象,再通過(guò)createFromParcel將Parcel對(duì)象映射成你的對(duì)象。也可以將Parcel看成是一個(gè)流,通過(guò)writeToParcel把對(duì)象寫(xiě)到流里面,在通過(guò)createFromParcel從流里讀取對(duì)象,只不過(guò)這個(gè)過(guò)程需要你來(lái)實(shí)現(xiàn),因此寫(xiě)的順序和讀的順序必須一致。代碼如下:public
class
MyParcelable
implements
Parcelable
{
private
int
mData;
public
int
describeContents()
{
return
0;
}
public
void
writeToParcel(Parcel
out,
int
flags)
{
out.writeInt(mData);
}
public
static
final
Parcelable.Creator<MyParcelable>
CREATOR
=
new
Parcelable.Creator<MyParcelable>()
{
public
MyParcelable
createFromParcel(Parcel
in)
{
return
new
MyParcelable(in);
}
public
MyParcelable[]
newArray(int
size)
{
return
new
MyParcelable[size];
}
};
private
MyParcelable(Parcel
in)
{
mData
=
in.readInt();
}
}8、Serializable實(shí)現(xiàn)與Parcelabel實(shí)現(xiàn)的區(qū)別1)Serializable的實(shí)現(xiàn),只需要implements
Serializable即可。這只是給對(duì)象打了一個(gè)標(biāo)記,系統(tǒng)會(huì)自動(dòng)將其序列化。2)Parcelabel的實(shí)現(xiàn),不僅需要implements
Parcelabel,還需要在類中添加一個(gè)靜態(tài)成員變量CREATOR,這個(gè)變量需要實(shí)現(xiàn)Parcelable.Creator接口。兩者代碼比較:1)創(chuàng)建Person類,實(shí)現(xiàn)Serializablepublic
class
Person
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-7060210544600464481L;
private
String
name;
private
int
age;
public
String
getName()
{
return
name;
}
public
void
setName(String
name)
{
=
name;
}
public
int
getAge()
{
return
age;
}
public
void
setAge(int
age)
{
this.age
=
age;
}
}2)創(chuàng)建Book類,實(shí)現(xiàn)Parcelablepublic
class
Book
implements
Parcelable
{
private
String
bookName;
private
String
author;
private
int
publishDate;
public
Book()
{
}
public
String
getBookName()
{
return
bookName;
}
public
void
setBookName(String
bookName)
{
this.bookName
=
bookName;
}
public
String
getAuthor()
{
return
author;
}
public
void
setAuthor(String
author)
{
this.author
=
author;
}
public
int
getPublishDate()
{
return
publishDate;
}
public
void
setPublishDate(int
publishDate)
{
this.publishDate
=
publishDate;
}
@Override
public
int
describeContents()
{
return
0;
}
@Override
public
void
writeToParcel(Parcel
out,
int
flags)
{
out.writeString(bookName);
out.writeString(author);
out.writeInt(publishDate);
}
public
static
final
Parcelable.Creator<Book>
CREATOR
=
new
Creator<Book>()
{
@Override
public
Book[]
newArray(int
size)
{
return
new
Book[size];
}
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 四川省瀘州市瀘縣五中2024-2025學(xué)年高一(上)期末生物試卷(含答案)
- 習(xí)作:我的家人 說(shuō)課稿-2024-2025學(xué)年語(yǔ)文四年級(jí)上冊(cè)統(tǒng)編版
- 鉬產(chǎn)品深加工技術(shù)改造產(chǎn)能提升項(xiàng)目可行性研究報(bào)告寫(xiě)作模板-申批備案
- 廣西壯族自治區(qū)南寧市2024-2025學(xué)年八年級(jí)上學(xué)期期末生物試題(無(wú)答案)
- 安徽省淮北市和淮南市2025屆高三第一次質(zhì)量檢測(cè)歷史試卷(含答案)
- 陜西省寶雞市(2024年-2025年小學(xué)六年級(jí)語(yǔ)文)部編版期中考試((上下)學(xué)期)試卷及答案
- Unit 2 Making a Difference Developing ideas The power of good 說(shuō)課稿-2023-2024學(xué)年高一英語(yǔ)外研版(2019)必修第三冊(cè)
- Unit 1 developing the topic-Oral communication 說(shuō)課稿 2024-2025學(xué)年仁愛(ài)科普版(2024)七年級(jí)英語(yǔ)上冊(cè)
- 貴州黔南經(jīng)濟(jì)學(xué)院《數(shù)據(jù)結(jié)構(gòu)Ⅰ》2023-2024學(xué)年第一學(xué)期期末試卷
- 新疆塔城地區(qū)(2024年-2025年小學(xué)六年級(jí)語(yǔ)文)統(tǒng)編版綜合練習(xí)((上下)學(xué)期)試卷及答案
- 《生殖系統(tǒng)》課程教學(xué)大綱
- 檢驗(yàn)科質(zhì)控總結(jié)匯報(bào)
- 醫(yī)院婦產(chǎn)科2024年度工作總結(jié)
- 破產(chǎn)法培訓(xùn)課件銀行
- 中小學(xué)綜合實(shí)踐活動(dòng)課程指導(dǎo)綱要解讀
- 綠色化學(xué)的研究現(xiàn)狀及進(jìn)展
- 泥結(jié)石路面施工設(shè)計(jì)方案
- 居家養(yǎng)老上門(mén)服務(wù)投標(biāo)方案(技術(shù)方案)
- 物理化學(xué)習(xí)題(含答案)
- 某公司廉潔自律管理規(guī)定全套
- 精密儀器設(shè)計(jì)基礎(chǔ)
評(píng)論
0/150
提交評(píng)論