Quelqu'un peut-il me dire la raison de l' échec de l' erreur de transaction de liant ? Je peux voir ce message d'erreur dans logcat. J'obtiens cette erreur en essayant de mettre un bitmap dynamiquement dans un widget ...
116
Cela est dû au fait que toutes les modifications apportées aux RemoteViews sont sérialisées (par exemple, setInt et setImageViewBitmap). Les bitmaps sont également sérialisés dans un bundle interne. Malheureusement, cet ensemble a une limite de taille très petite.
Vous pouvez le résoudre en réduisant la taille de l'image de cette façon:
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;
}
Choisissez newHeight pour être assez petit (~ 100 pour chaque carré qu'il devrait prendre à l'écran) et utilisez-le pour votre widget, et votre problème sera résolu :)
Vous pouvez compresser le bitmap en tant que tableau d'octets, puis le décompresser dans une autre activité, comme celle-ci.
Compresse!!
Décompressez !!
la source
Le tampon de transaction Binder a une taille fixe limitée, actuellement 1 Mo, qui est partagée par toutes les transactions en cours pour le processus. Par conséquent, cette exception peut être levée lorsque de nombreuses transactions sont en cours, même lorsque la plupart des transactions individuelles sont de taille moyenne.
renvoyer ce lien
la source
Voir ma réponse dans ce fil.
intent.putExtra("Some string",very_large_obj_for_binder_buffer);
Vous dépassez le tampon de transactions du classeur en transférant des éléments volumineux d'une activité à une autre activité.
la source
J'ai résolu ce problème en stockant des images sur le stockage interne, puis en utilisant .setImageURI () plutôt que .setBitmap ().
la source
La bonne approche consiste à utiliser
setImageViewUri()
(plus lentement) ou àsetImageViewBitmap()
recréerRemoteView
s chaque fois que vous mettez à jour la notification.la source