在Activity或者組件之前傳遞信息時,一般採用intent綁定bundle的方式傳值,但在使用過程中須要注意的是不要用bundle傳遞大容量數據:
在做項目的過程中,須要將聽寫界面的聽寫結果信息傳遞到聽寫記錄界面供顯示用,可是因為傳遞的數據量過大導致程序ANR,甚至直接報異常(傳遞的信息里面有bitmap轉換成的byte數組、每個詞組的拼音、詞語、語音信息),經過分析發現是因為bundle不能傳遞大容量的數據信息,在stackoverflow里面查閱發現有同行遇到類似的問題:
(1)“The size limit of Intent is still pretty low in Jelly Bean, which is somewhat lower than 1MB (around 90K), so you should always be cautious about your data length, even if your application targets only latest Android versions.”
(2)“As per my experience (sometime ago), you are able to put up to 1MB of data in a Bundle
encapsulated inside Intent
. I think, this restriction was valid up till Froyo or GingerBread.”
所以在通過bundle傳遞數據時僅僅能傳遞較小的數據信息,對於在不同組件之間須要傳遞大容量數據的情況時,有幾種替代方式能夠解決不能用bundle傳遞這些數據的問題:
方法一:將須要傳遞的數據寫在暫時文件或者數據庫中,再跳轉到另外一個組件的時候再去讀取這些數據信息,這樣的處理方式會因為讀寫文件較為耗時導致程序執行效率較低;
方法二:將須要傳遞的數據信息封裝在一個靜態的類中(注意當前組件和要跳轉到的組件必須屬於同一個進程,由於進程之間才可以共享數據),在當前組件中為類設置內容,然后再跳轉到的組件中去取,這樣的處理方式效率非常高,可是會破壞程序的獨立性。
詳細採用哪種替代方式取決於詳細的情況,本人建議採取另外一種處理方式,由於這樣會大大提高程序的執行效率,至於程序的獨立性,看你怎么去封裝這個類了。
參考資料: