remoteviews-bitmap-budget
A widget's images travel by value, and the trip is capped
Android only. A widget is drawn out of process: your code builds a RemoteViews tree, the system
hands it to the launcher, and the launcher inflates it. Anything that is not a resource id — which
means every decoded bitmap — is copied into that payload. The platform enforces a ceiling on the
bitmap memory one widget update may carry, and an update over it is rejected outright.
Rejected means the widget stops showing your layout and starts showing the framework's error placeholder. It does not throw where you can catch it, and the real cause appears only in the system log.
The arithmetic, which is the whole decision
A decoded bitmap costs width × height × 4 bytes at eight bits per channel. Nothing about the
source file matters — not its byte size, not its compression. Only its pixel dimensions.