簡體   English   中英

Android 中的捆綁包有限制嗎?

[英]Is there any limit of bundle in Android?

我想知道android bundle的數據大小是否有上限。 我嘗試按大小 > 80k 的包發布數據,並拋出 android 致命異常。數據是可序列化的。

這取決於捆綁包的用途。 捆綁包本身僅受內存量的限制。

捆綁包的兩個主要用途是使用意圖在組件之間傳遞信息和保存活動的狀態。

1. 意圖/綁定器

當用於在 Android 組件之間傳遞信息時,bundle 被序列化為綁定事務。 一個進程中所有綁定器事務的總大小為 1MB。 如果超過此限制,您將收到此致命錯誤“!!! FAILED BINDER TRANSACTION !!!”

建議您將這些包中的數據保持得盡可能小,因為它是一個共享緩沖區,任何大於幾千字節的內容都應寫入磁盤。

參考: https : //android.googlesource.com/platform/frameworks/base/+/jb-release/core/jni/android_util_Binder.cpp

ALOGE("!!! FAILED BINDER TRANSACTION !!!");
        // TransactionTooLargeException is a checked exception, only throw from certain methods.
        // FIXME: Transaction too large is the most common reason for FAILED_TRANSACTION
        //        but it is not the only one.  The Binder driver can return BR_FAILED_REPLY
        //        for other reasons also, such as if the transaction is malformed or
        //        refers to an FD that has been closed.  We should change the driver
        //        to enable us to distinguish these cases in the future.

參考: http : //developer.android.com/reference/android/os/TransactionTooLargeException.html

Binder 事務緩沖區有一個有限的固定大小,當前為 1Mb,由進程的所有正在進行的事務共享。 因此,當有許多事務正在進行時,即使大多數單個事務的大小適中,也會拋出此異常。

2. 保存的實例狀態(Activity onSaveInstanceState、onPause 等)

我發現我可以在用於保存 Activity 狀態的包中存儲的大小沒有限制。 我做了一些測試,在我收到內存不足異常試圖分配我試圖保存的數據之前,可以成功存儲大約 175mb。

更新:這項研究是在 2014 年進行的,新版本的 Android 可能會因超過 500kb 的包而崩潰

我認為限制是 500kb。 您可以將傳遞的對象保存在文件中,並在包中發送文件的路徑。 您可以查看我在SO提出的類似問題

Binder 事務緩沖區有一個有限的固定大小,目前為1MB ,它由進程中所有正在進行的事務共享。 由於此限制是在進程級別而不是每個活動級別,因此這些事務包括應用程序中的所有綁定事務,例如 onSaveInstanceState、startActivity 以及與系統的任何交互。 當超出大小限制時,將引發 TransactionTooLargeException。

對於savedInstanceState 的特定情況,數據量應該保持較小,因為只要用戶可以導航回該活動(即使該活動的進程被終止),系統進程就需要保留提供的數據。 我們建議您將保存的狀態保持在少於50k的數據。

Parcelable 和捆綁

是的,現在在 android Nougat 中,如果您大致超過限制(500Kb),它將崩潰。

安卓牛軋糖問題

是的,它有 1MB 的限制。

您可以使用Singleton類來傳遞數據。

根據Google Android API ,日期應小於 50K。

我認為最大的包大小是 1024 KiloBytes。 為了在活動之間傳輸大對象,您應該嘗試其他方式(內存緩存、本地存儲等)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM