Ответы:
Это вызвано тем, что все изменения в RemoteView сериализованы (например, setInt и setImageViewBitmap). Растровые изображения также сериализуются во внутренний пакет. К сожалению, у этого пакета очень маленький размер.
Вы можете решить эту проблему, уменьшив размер изображения следующим образом:
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;
}
Выберите newHeight достаточно маленьким (~ 100 на каждый квадрат, который он должен занимать на экране) и используйте его для своего виджета, и ваша проблема будет решена :)
Вы можете сжать растровое изображение как массив байтов, а затем распаковать его в другом действии, например здесь.
Компресс!!
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] bytes = stream.toByteArray();
setresult.putExtra("BMP",bytes);
Распаковка !!
byte[] bytes = data.getByteArrayExtra("BMP");
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
Буфер транзакции Binder имеет ограниченный фиксированный размер, в настоящее время 1 МБ, который используется всеми транзакциями, выполняемыми для процесса. Следовательно, это исключение может быть вызвано, когда выполняется много транзакций, даже если большинство отдельных транзакций имеют средний размер.
обратитесь по этой ссылке
Я решил эту проблему, сохранив изображения во внутреннем хранилище, а затем используя .setImageURI (), а не .setBitmap ().
Правильный подход - использовать setImageViewUri()
(медленнее) или setImageViewBitmap()
и воссоздавать RemoteView
каждый раз, когда вы обновляете уведомление.