intent傳輸數(shù)據(jù)的大小限制 Intent傳遞數(shù)據(jù)時(shí)?
Intent傳遞數(shù)據(jù)時(shí)?在Activity或者組件之前傳遞信息時(shí),一般采用intent綁定bundle的方式傳值,但在使用過(guò)程中需要注意的是不要用bundle傳遞大容量數(shù)據(jù):在做項(xiàng)目的過(guò)程中,需要將聽
Intent傳遞數(shù)據(jù)時(shí)?
在Activity或者組件之前傳遞信息時(shí),一般采用intent綁定bundle的方式傳值,但在使用過(guò)程中需要注意的是不要用bundle傳遞大容量數(shù)據(jù):
在做項(xiàng)目的過(guò)程中,需要將聽寫界面的聽寫結(jié)果信息傳遞到聽寫記錄界面供顯示用,但是由于傳遞的數(shù)據(jù)量過(guò)大導(dǎo)致程序ANR,甚至直接報(bào)異常(傳遞的信息里面有bitmap轉(zhuǎn)換成的byte數(shù)組、每一個(gè)詞組的拼音、詞語(yǔ)、語(yǔ)音信息),經(jīng)過(guò)分析發(fā)現(xiàn)是由于bundle不能傳遞大容量的數(shù)據(jù)信息,在stackoverflow里面查閱發(fā)現(xiàn)有同行遇到類似的問(wèn)題:
(1)“ThesizelimitofIntentisstillprettylowinJellyBean,whichissomewhatlowerthan1MB(around90K),soyoushouldalwaysbecautiousaboutyourdatalength,evenifyourapplicationtargetsonlylatestAndroidversions.”
(2)“Aspermyexperience(sometimeago),youareabletoputupto1MBofdatainaBundleencapsulatedinsideIntent.Ithink,thisrestrictionwasvaliduptillFroyoorGingerBread.”
所以在通過(guò)bundle傳遞數(shù)據(jù)時(shí)只能傳遞較小的數(shù)據(jù)信息,對(duì)于在不同組件之間需要傳遞大容量數(shù)據(jù)的情況時(shí),有幾種替代方式可以解決不能用bundle傳遞這些數(shù)據(jù)的問(wèn)題:
方法一:將需要傳遞的數(shù)據(jù)寫在臨時(shí)文件或者數(shù)據(jù)庫(kù)中,再跳轉(zhuǎn)到另外一個(gè)組件的時(shí)候再去讀取這些數(shù)據(jù)信息,這種處理方式會(huì)由于讀寫文件較為耗時(shí)導(dǎo)致程序運(yùn)行效率較低;
方法二:將需要傳遞的數(shù)據(jù)信息封裝在一個(gè)靜態(tài)的類中(注意當(dāng)前組件和要跳轉(zhuǎn)到的組件必須屬于同一個(gè)進(jìn)程,因?yàn)檫M(jìn)程之間才能夠共享數(shù)據(jù)),在當(dāng)前組件中為類設(shè)置內(nèi)容,然后再跳轉(zhuǎn)到的組件中去取,這種處理方式效率很高,但是會(huì)破壞程序的獨(dú)立性。
具體采用哪種替代方式取決于具體的情況,本人建議采取第二種處理方式,因?yàn)檫@樣會(huì)大大提高程序的運(yùn)行效率,至于程序的獨(dú)立性,看你怎么去封裝這個(gè)類了。
post方法一次可以傳遞參數(shù)大小限制是多少?
理論上講,POST是沒(méi)有大小限制的,HTTP協(xié)議規(guī)范也沒(méi)有進(jìn)行大小限制 post方式,傳送數(shù)據(jù)最大理論上沒(méi)有限制,取決于服務(wù)器設(shè)置和內(nèi)存大小 通常是服務(wù)器限制和其他語(yǔ)言限制,而不是請(qǐng)求規(guī)范中的限制
Intent傳遞數(shù)據(jù)時(shí),可以傳遞哪些類型數(shù)據(jù)?
1.簡(jiǎn)單或基本數(shù)據(jù)類型
2.傳遞一個(gè)Bundle
3.傳遞Serializable對(duì)象
4.Parcelable對(duì)象
5.Intent