Activity之間使用intent傳遞大數(shù)據(jù)出現(xiàn)Bug及解決方法

? ? ? ? 很久很久(大概兩個(gè)月吧)之前,在項(xiàng)目中遇到了這個(gè)問(wèn)題,就想著要記錄一下,然后就拖到了現(xiàn)在。所以本猿(其實(shí)人家是媛)得出一個(gè)重要推論:不要輕易放棄一個(gè)拖延癥重患,他想到的一定會(huì)做到,只是時(shí)間的問(wèn)題,就是不知道你們等不等的到(此處適合壞笑的表情)。

? ? ? ?當(dāng)測(cè)試找來(lái)這個(gè)bug的時(shí)候,本寶寶一頭霧水,沒(méi)崩,沒(méi)報(bào)啥常規(guī)錯(cuò),只見logcat空余一行:E: !!! FAILED BINDER TRANSACTION !!! (當(dāng)然是紅色)。然后寶寶開始Google,才發(fā)現(xiàn)原來(lái)是intent傳遞大容量數(shù)據(jù)產(chǎn)生的問(wèn)題,導(dǎo)致新Activity無(wú)法啟動(dòng)。問(wèn)題詳細(xì)分析請(qǐng)click?here

? ? ? ? 解決方案,我是采用的靜態(tài)成員變量方式實(shí)現(xiàn)大容量數(shù)據(jù)傳遞的(當(dāng)然也是參考別人的咯,畢竟現(xiàn)在巨人很多,有的是肩膀可站)。具體如下:

這個(gè)可以直接在activity中也可以單獨(dú)一個(gè)數(shù)據(jù)結(jié)構(gòu)體,就和單例差不多了。

比如:

public class DataHolder{

private static String data;

public static String getData(){returndata;}

public static String setData(Stringdata){this.data=data;}

}

啟動(dòng)之前設(shè)置數(shù)據(jù),新的activity獲取數(shù)據(jù)。

注意:這些情況如果數(shù)據(jù)很大很多,比如bitmap,處理不當(dāng)是很容易導(dǎo)致內(nèi)存泄露或者內(nèi)存溢出的。

所以可以考慮使用WeakReferences將數(shù)據(jù)包裝起來(lái)。

比如:

public class DataHolder{

Map<String, WeakReference<Object>> data = new HashMap<String, WeakReference>();

void save(String id,Object object{

data.put(id,new WeakReference<Object>(object));

}

Object retrieve(String id){WeakReference<Object>?objectWeakReference=data.get(id);

return objectWeakReference.get();}

}

啟動(dòng)之前:

DataHolder.getInstance().save(someId,someObject);

新activity中:

DataHolder.getInstance().retrieve(someId);

這里可能需要通過(guò)intent傳遞id,如果數(shù)據(jù)唯一,id都可以不傳遞的。save() retrieve()中id都固定即可。

? ? ? ? 最后寶寶要聲明:?jiǎn)栴}是自己遇到的,解決方法是別人的。所以寶寶只是小小的搬運(yùn)工,公德心還是有的,給你們 --> ??解決方法連接

大恩不言謝,所以膝蓋什么的就不用送了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,633評(píng)論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,525評(píng)論 19 139
  • 一、繼承結(jié)構(gòu) java.lang.object-->android.content.Context-->and...
    supory閱讀 1,542評(píng)論 1 3
  • 16.4Activity數(shù)據(jù)傳遞 16.4.1數(shù)據(jù)傳遞媒介 16.4.1.1 通過(guò)Intent傳遞數(shù)據(jù) (1)直接...
    xjbclz閱讀 378評(píng)論 0 0
  • 他喜歡你,但一點(diǎn)也不妨礙他也喜歡別人。 在最好的年級(jí),遇見最好的自己,便不是辜負(fù)青春。 等不到的你,也許真的是有緣...
    蕭蕭暮雪閱讀 366評(píng)論 6 1

友情鏈接更多精彩內(nèi)容