android - 仅在牛轧糖上出现 TransactionTooLargeException

标签 android android-7.0-nougat parcel android-7.1-nougat

<分区>

我开发了一款应用,该应用在 Android 版本低于 Nougat 的设备上运行良好。

当我在带有 Nougat 的设备上启动应用程序并按下主页按钮时,应用程序崩溃并且在 logcat 中我有:

!!! FAILED BINDER TRANSACTION !!!  (parcel size = 1819712)
Unhandled exception
java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 1819712 bytes
    at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3781)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6119)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
 Caused by: android.os.TransactionTooLargeException: data parcel size 1819712 bytes
    at android.os.BinderProxy.transactNative(Native Method)
    at android.os.BinderProxy.transact(Binder.java:615)
    at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:3636)
    at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3773)
    at android.os.Handler.handleCallback(Handler.java:751) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6119) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

有没有简单的解决办法?此问题仅出现在牛轧糖上。

最佳答案

我也遇到了同样的问题。这在谷歌论坛上被许多开发者提示过。他们的回答是WAI(work as intended),因为他们不建议在状态下保存太多数据。 所以建议只向 Intent 添加非常基本的参数。 如果要在 Activity 或 fragment 之间发送数据,

  • 将数据存储在一个(临时)文件中并传递文件 URI。 如果您想转移,此选项可能是您唯一的选择 大量数据到一个完全不同的应用程序。存储数据 在应用实例中;
  • 创建一个包含 您传递的数据。
  • 如果您使用的是 FragmentStatePageAdapter,请添加以下代码以避免它保存状态数据。

    @Override    
    public Parcelable saveState() {
            Bundle bundle = (Bundle) super.saveState();
            bundle.putParcelableArray("states", null); // Never maintain any states from the base class to avoid TransactionTooLargeException
            return bundle;
    }
    

引用:

https://issuetracker.google.com/issues/37103380

https://www.neotechsoftware.com/blog/android-intent-size-limit

关于android - 仅在牛轧糖上出现 TransactionTooLargeException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43466445/

相关文章:

android - 改变 MediaPlayer 的 SurfaceViews

java - Android 图库 View 在单个屏幕上显示两个 View 。

android - 由 png 和 overlay 组成的 XML drawable

javascript - 无法读取未定义的属性 'fragment'

android - BadParcelableException : ClassNotFoundException when unmarshalling: (empty classname)

java - Android studio 没有此栏 SQL 数据库

android - 在 Android N 中打开下载的文件

Android 矢量可绘制用于 Android N 上的启动器图标和其他图像

java - 确定 WebView 实现(系统 WebView 或 Chrome)

android - 来自 Parcel.readException 的 NullPointerException(等)