最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android Intent傳遞大量數(shù)據(jù)出現(xiàn)問題解決

 更新時間:2022年07月28日 14:40:20   作者:AnRFDev  
這篇文章主要為大家介紹了Android Intent傳遞大量數(shù)據(jù)出現(xiàn)問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

官方文檔 https://developer.android.google.cn/guide/components/activities/parcelables-and-bundles

在sendBroadcast,startActivity時,我們會用到Intent。 Intent可以攜帶一些數(shù)據(jù),比如基本類型數(shù)據(jù)int、Boolean,或是String,或是序列化對象,Parcelable與Serializable。

異常TransactionTooLargeException

Intent傳遞數(shù)據(jù)時,如果數(shù)據(jù)太大,可能會出現(xiàn)異常TransactionTooLargeException。

注意:

在 Android 7.0(API 級別 24)或更高版本中,系統(tǒng)會在運行時拋出 TransactionTooLargeException 異常。在較低版本的 Android 中,系統(tǒng)僅在 logcat 中顯示警告。

TransactionTooLargeException繼承了RemoteException

package android.os;
public class TransactionTooLargeException extends RemoteException {
    public TransactionTooLargeException() {
        super();
    }
    public TransactionTooLargeException(String msg) {
        super(msg);
    }
}

追蹤到Binder,它的transactNative方法會報出RemoteException

public native boolean transactNative(int code, Parcel data, Parcel reply,
            int flags) throws RemoteException;

拋出異常與Binder有關(guān)。

通過 intent 發(fā)送數(shù)據(jù)時,應(yīng)小心地將數(shù)據(jù)大小限制為幾 KB。發(fā)送過多數(shù)據(jù)會導(dǎo)致系統(tǒng)拋出 TransactionTooLargeException 異常。

Intent攜帶信息的大小受Binder限制

Intent攜帶信息的大小其實是受Binder限制。本文標(biāo)題也可以改為“Binder傳遞數(shù)據(jù)大小限制”。

數(shù)據(jù)以Parcel對象的形式存放在Binder傳遞緩存中。 如果數(shù)據(jù)或返回值比傳遞buffer大,則此次傳遞調(diào)用失敗并拋出TransactionTooLargeException異常。

Binder事務(wù)緩沖區(qū)有一個限定大小,通常是1Mb。由進(jìn)程中正在處理的所有事務(wù)共享緩存空間。

由于此限制是進(jìn)程級別而不是 Activity 級別的限制,因此這些事務(wù)包括應(yīng)用中的所有 binder 事務(wù),例如 onSaveInstanceState,startActivity 以及與系統(tǒng)的任何互動。超過大小限制時,將引發(fā) TransactionTooLargeException。

對于 savedInstanceState 的具體情況,應(yīng)將數(shù)據(jù)量保持在較小的規(guī)模,因為只要用戶可以返回到該 Activity,系統(tǒng)進(jìn)程就需要保留所提供的數(shù)據(jù)(即使 Activity 的進(jìn)程已終止)。我們建議您將保存的狀態(tài)保持在 50k 數(shù)據(jù)以下。

為什么Binder要限制傳輸數(shù)據(jù)的大小

個人推測,作為一種IPC的方式,Binder并不是為傳輸大量數(shù)據(jù)而設(shè)計。

替代方案

當(dāng)需要傳遞長字符串、Bitmap等時,不要考慮使用Intent傳遞數(shù)據(jù)的方案

1、單例

2、EventBus

3、Application

4、持久化數(shù)據(jù)

以上就是Android Intent傳遞大量數(shù)據(jù)出現(xiàn)問題解決的詳細(xì)內(nèi)容,更多關(guān)于Android Intent傳遞大量數(shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

阿鲁科尔沁旗| 什邡市| 开鲁县| 浠水县| 靖远县| 穆棱市| 福清市| 南昌市| 阿拉善左旗| 嘉祥县| 贡觉县| 宁南县| 平江县| 龙泉市| 武川县| 佛冈县| 巩义市| 盘锦市| 久治县| 南丹县| 永安市| 马尔康县| 樟树市| 左云县| 博罗县| 安溪县| 车致| 定陶县| 介休市| 大悟县| 庆阳市| 监利县| 张家口市| 昌都县| 舟山市| 建始县| 镇原县| 时尚| 徐州市| 古田县| 丹寨县|