Manqué de liant de la transaction lors de la mise un bitmap de manière dynamique dans un widget
Quelqu'un peut-il me dire la raison pour manqué de liant transaction erreur? Je peux voir ce message d'erreur dans le logcat.
J'obtiens cette erreur en essayant de mettre une image bitmap de manière dynamique dans un widget...
Cela est dû au fait que toutes les modifications à la RemoteViews sont sérialisés (par exemple setInt et setImageViewBitmap ). Les images sont également sérialisé dans un intérieur bundle. Malheureusement, cette série a une très petite taille limite.
Vous pouvez le résoudre par une réduction de la taille de l'image de cette façon:
Choisir newHeight à être assez petit (~100 pour chaque carré, il doit prendre sur l'écran) et l'utiliser pour votre widget, et votre problème sera résolu 🙂
Ce que je n'arrive pas à comprendre, c'est ce qui se passe exactement. Je suis à l'aide d'un ViewPager avec un assez vaste ensemble de données, mais il ne se souvenir de tout entre les pages en dépit de la reliure d'erreur de spam. Le bundle écrites dans un stockage local et prefetched ou quoi? Puis-je éventuellement de perdre des données si je peux ajouter plus de pages?
Mais cela permettra de réduire la qualité de l'image
Bravo! Grande solution de contournement temporaire de la mise en œuvre, j'ai été travailler sur. Bien que passant lourdes de données devrait être évité en utilisant Bundles/Intentions.
Le Liant de la transaction de la mémoire tampon a une limite de taille fixe, qui est actuellement de 1 mo, qui est partagée par l'ensemble des transactions en cours pour le processus. Par conséquent, cette exception peut être levée lorsqu'il y a de nombreuses opérations en cours, même lorsque la plupart des opérations de taille moyenne.
La bonne approche est d'utiliser setImageViewUri() (plus lent) ou le setImageViewBitmap() et de recréer RemoteViews chaque mise à jour de la notification.
Cela est dû au fait que toutes les modifications à la RemoteViews sont sérialisés (par exemple setInt et setImageViewBitmap ). Les images sont également sérialisé dans un intérieur bundle. Malheureusement, cette série a une très petite taille limite.
Vous pouvez le résoudre par une réduction de la taille de l'image de cette façon:
Choisir newHeight à être assez petit (~100 pour chaque carré, il doit prendre sur l'écran) et l'utiliser pour votre widget, et votre problème sera résolu 🙂
Vous pouvez compresser l'image sous la forme d'un octet du tableau, puis décompressez-le dans une autre activité, comme cela.
Compresser!!
Décompresser!!
bmp
variable?Le Liant de la transaction de la mémoire tampon a une limite de taille fixe, qui est actuellement de 1 mo, qui est partagée par l'ensemble des transactions en cours pour le processus. Par conséquent, cette exception peut être levée lorsqu'il y a de nombreuses opérations en cours, même lorsque la plupart des opérations de taille moyenne.
renvoyer cette lien
Voir ma réponse dans cette
fil de discussion.
intent.putExtra("Some string",very_large_obj_for_binder_buffer);
Vous dépassez le liant tampon de transaction par le transfert de grandes élément(s) d'une activité à une autre activité.
J'ai résolu ce problème en stockant les images sur la mémoire de stockage interne, puis à l'aide .setImageURI() plutôt que .setBitmap().
La bonne approche est d'utiliser
setImageViewUri()
(plus lent) ou lesetImageViewBitmap()
et de recréerRemoteView
s chaque mise à jour de la notification.