In the Android documentation for AppWidgetManager it says
The total Bitmap memory used by the RemoteViews object cannot exceed that required
to fill the screen 1.5 times, ie. (screen width x screen height x 4 x 1.5) bytes.
But the documentation for TransactionTooLargeException says:
The Binder transaction buffer has a limited fixed size, currently 1Mb, which is
shared by all transactions in progress for the process.
Nearly every Android device on the market has a screen size large enough that a Bitmap filling it would exceed 1Mb (for example 800 x 600 x 4 = 1,920,000 bytes). I looked into the Android platform source and it doesn't seem to be using ashmem with pipes or anything esoteric, just a normal AIDL file and inside RemoteViews the Bitmap objects are Parcelable in a normal way (it does drop down to native code but it seems to write all the Bitmap pixels to a regular Parcel).
So how is it possible that Android is exceeding the Binder transaction limit? Does oneway
allow larger data to be sent?