如何在通过广播接收器将 JobIntentService 之间的数据传递给活动时防止 TransactionTooLarge 异常

Posted

技术标签:

【中文标题】如何在通过广播接收器将 JobIntentService 之间的数据传递给活动时防止 TransactionTooLarge 异常【英文标题】:How to prevent TransactionTooLarge exception while passing data between JobIntentService to activity via Broadcast receiver 【发布时间】:2020-11-01 13:45:16 【问题描述】:

登录页面后,我正在使用 JobIntentService 从服务器下载数据并通过 BroadcastReceiver 将数据传递给活动。 对于较少量的数据,它可以正常工作,但是当我处理实时数据时,它会给出以下异常:

Caused by: android.os.TransactionTooLargeException: data parcel size 1450704 bytes
        at android.os.BinderProxy.transactNative(Native Method)
        at android.os.BinderProxy.transact(Binder.java:1127)
        at android.app.IActivityManager$Stub$Proxy.broadcastIntent(IActivityManager.java:3893)
        at android.app.ContextImpl.sendBroadcast(ContextImpl.java:1009)
        at android.content.ContextWrapper.sendBroadcast(ContextWrapper.java:444) 

I passing data like this from service class : 
Intent intent = new Intent(ACTION_CHECK_DOWNLOADSTATUS);
intent.putExtra("response",response);
sendBroadcast(intent);


But it gives TransactionTooLargeException..
How to prevent this?

How do I pass large amount of Data ??

Pls suggest...

【问题讨论】:

【参考方案1】:

您不能在Intent 中传递“大量数据”。如果您要传递“大量数据”,则需要使用以下方法之一:

将数据存储在 SQLite 数据库中 将数据存储在文件中 将数据存储在 public static 变量中,以便应用程序中的所有类都可以访问它(这不是最好的选择,因为应用程序重启会出现问题,但这是最简单的方法)

【讨论】:

以上是关于如何在通过广播接收器将 JobIntentService 之间的数据传递给活动时防止 TransactionTooLarge 异常的主要内容,如果未能解决你的问题,请参考以下文章

如何将结果数据从广播接收器发送到活动

如何使用警报管理器将数据从片段传递到广播接收器

通过 *** 连接发送/接收广播消息

我如何将字符串从主要活动传递到带有警报管理器的广播接收器?

从广播接收器在 AlarmManager 事件上启动 Activity

如何将联系人信息放入短信广播接收器类?