Odpowiedzi:
Jest to spowodowane tym, że wszystkie zmiany w RemoteViews są serializowane (np. SetInt i setImageViewBitmap). Mapy bitowe są również serializowane do pakietu wewnętrznego. Niestety ten pakiet ma bardzo mały limit rozmiaru.
Możesz rozwiązać ten problem, zmniejszając rozmiar obrazu w ten sposób:
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;
}
Wybierz newHeight, aby był wystarczająco mały (~ 100 na każdy kwadrat, jaki powinien zająć na ekranie) i użyj go jako widgetu, a problem zostanie rozwiązany :)
Możesz skompresować bitmapę jako tablicę bajtów, a następnie zdekompresować ją w innym działaniu, takim jak to.
Kompresja!!
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] bytes = stream.toByteArray();
setresult.putExtra("BMP",bytes);
Rozpakuj !!
byte[] bytes = data.getByteArrayExtra("BMP");
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
Bufor transakcji Binder ma ograniczony stały rozmiar, obecnie 1 MB, który jest współdzielony przez wszystkie transakcje w toku procesu. W konsekwencji ten wyjątek może zostać zgłoszony, gdy istnieje wiele transakcji w toku, nawet jeśli większość pojedynczych transakcji ma umiarkowany rozmiar.
skieruj ten link
Właściwym podejściem jest użycie setImageViewUri()
(wolniej) lub setImageViewBitmap()
i ponowne utworzenie RemoteView
s za każdym razem, gdy aktualizujesz powiadomienie.