Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Avoiding FAILED BINDER TRANSACTION error when updating lots of widget bitmaps

I am coming across an error when I am updating my RemoteViews in my AppWidget.

.. !!! FAILED BINDER TRANSACTION !!!

This is caused because all the changes to the RemoteViews are serialised (e.g. setInt and setImageViewBitmap ). The bitmaps are also serialised into an internal bundle. Unfortunately this bundle has a very small size limit.

I cannot use setImageResource as I am hoping to allow the user to download skins for the widget.

Can anyone recommend a workaround for this problem? I am already using a "new" RemoteViews object for each instance of the widget, but a single instance contains too many updates.

Thanks!

like image 721
Ash McConnell Avatar asked Aug 01 '11 14:08

Ash McConnell


3 Answers

The best workaround I found was to use setImageURI on the ImageView objects using

remoteViews.setUri(R.id.myImageView, "setImageURI", "file://blahblahblah.png");

Here is the full discussion from Android Developers group

like image 156
Ash McConnell Avatar answered Nov 18 '22 16:11

Ash McConnell


You can solve it by scaling down the image size this way:

public static Bitmap scaleDownBitmap(Bitmap photo, int newHeight, Context context) {

final float densityMultiplier = context.getResources().getDisplayMetrics().density;        

int h= (int) (newHeight*densityMultiplier);
int w= (int) (h * photo.getWidth()/((double) photo.getHeight()));

photo=Bitmap.createScaledBitmap(photo, w, h, true);

return photo;
}

Choose newHeight to be small enough (~100 for every square it should take on the screen) and use it for your widget, and your problem will be solved :)

like image 7
GalDude33 Avatar answered Nov 18 '22 16:11

GalDude33


The Binder transaction buffer has a limited fixed size, currently 1Mb, which is shared by all transactions in progress for the process. Consequently this exception can be thrown when there are many transactions in progress even when most of the individual transactions are of moderate size.

refer this link

like image 1
dharam Avatar answered Nov 18 '22 15:11

dharam