我正在通过这样的广播发送数据:
Intent outIntent = new Intent(Const.ACTION_FEED);
outIntent.putExtra(Const.EXTRA_FEED, data);
sendBroadcast(outIntent);
问题在于data
可能会变得很大,导致TransactionTooLargeException
。 documentation说:
Binder事务缓冲区具有有限的固定大小,当前为1Mb,该进程中的所有正在进行的事务共享该大小。因此,即使有很多交易正在进行,即使有许多交易正在进行,也会引发此异常。
底线:似乎无法预先确定data
可接受的尺寸。
此外:
避免使用
TransactionTooLargeException
的关键是使所有交易保持相对较小。 [...]如果可能,请尝试将较大的请求分解为较小的部分。
我确定要发送的数据太大而无法一次发送后,可以轻松将其分解成较小的部分并单独发送。
逻辑步骤是将整个代码包装在try
/ catch
块中,并在收到TransactionTooLarge
异常后,将数据切成较小的块,然后重试。 / p>
A,根据日志记录,异常不是在调用者端抛出,而是在系统进程中抛出。然后,系统继续使广播的接收方崩溃,此时,任何恢复都将超出发送方的控制范围。
如何确定可以作为广播额外内容发送多少数据,并防止崩溃数据接收者?