如何防止TransactionTooLargeException或从中恢复

时间:2019-07-19 21:40:40

标签: android broadcastreceiver android-broadcast android-binder

我正在通过这样的广播发送数据:

Intent outIntent = new Intent(Const.ACTION_FEED);
outIntent.putExtra(Const.EXTRA_FEED, data);
sendBroadcast(outIntent);

问题在于data可能会变得很大,导致TransactionTooLargeExceptiondocumentation说:

  

Binder事务缓冲区具有有限的固定大小,当前为1Mb,该进程中的所有正在进行的事务共享该大小。因此,即使有很多交易正在进行,即使有许多交易正在进行,也会引发此异常。

底线:似乎无法预先确定data可接受的尺寸。

此外:

  

避免使用TransactionTooLargeException的关键是使所有交易保持相对较小。 [...]如果可能,请尝试将较大的请求分解为较小的部分。

我确定要发送的数据太大而无法一次发送后,可以轻松将其分解成较小的部分并单独发送。

逻辑步骤是将整个代码包装在try / catch块中,并在收到TransactionTooLarge异常后,将数据切成较小的块,然后重试。 / p>

A,根据日志记录,异常不是在调用者端抛出,而是在系统进程中抛出。然后,系统继续使广播的接收方崩溃,此时,任何恢复都将超出发送方的控制范围。

如何确定可以作为广播额外内容发送多少数据,并防止崩溃数据接收者?

0 个答案:

没有答案