Respostas:
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!!
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] bytes = stream.toByteArray();
setresult.putExtra("BMP",bytes);
Descompacte !!
byte[] bytes = data.getByteArrayExtra("BMP");
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
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
A abordagem certa é usar setImageViewUri()
(mais lento) ou setImageViewBitmap()
e recriar RemoteView
s toda vez que você atualizar a notificação.