Alguém pode me dizer o motivo do erro de transação do fichário com falha? Posso ver essa mensagem de erro no logcat. Estou recebendo este erro ao tentar colocar um bitmap dinamicamente em um widget ...
116
Isso ocorre porque todas as alterações em RemoteViews são serializadas (por exemplo, setInt e setImageViewBitmap). Os bitmaps também são serializados em um pacote interno. Infelizmente, este pacote tem um limite de tamanho muito pequeno.
Você pode resolvê-lo reduzindo o tamanho da imagem desta forma:
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;
}
Escolha newHeight para ser pequeno o suficiente (~ 100 para cada quadrado que ele deve ocupar na tela) e use-o para seu widget, e seu problema será resolvido :)
Você pode compactar o bitmap como uma matriz de bytes e descompactá-lo em outra atividade, como esta.
Comprimir!!
Descompacte !!
fonte
O buffer de transação do Binder tem um tamanho fixo limitado, atualmente 1 MB, que é compartilhado por todas as transações em andamento para o processo. Consequentemente, essa exceção pode ser lançada quando há muitas transações em andamento, mesmo quando a maioria das transações individuais é de tamanho moderado.
consulte este link
fonte
Veja minha resposta neste tópico.
intent.putExtra("Some string",very_large_obj_for_binder_buffer);
Você está excedendo o buffer de transação do fichário ao transferir grandes elementos de uma atividade para outra.
fonte
Resolvi esse problema armazenando imagens no armazenamento interno e usando .setImageURI () em vez de .setBitmap ().
fonte
A abordagem certa é usar
setImageViewUri()
(mais lento) ousetImageViewBitmap()
e recriarRemoteView
s toda vez que você atualizar a notificação.fonte