Может ли кто-нибудь сказать мне причину неудачной ошибки транзакции связующего ? Я вижу это сообщение об ошибке в logcat. Я получаю эту ошибку при попытке динамически разместить растровое изображение в виджете ...
116
Это вызвано тем, что все изменения в 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 на каждый квадрат, который он должен занимать на экране) и используйте его для своего виджета, и ваша проблема будет решена :)
Вы можете сжать растровое изображение как массив байтов, а затем распаковать его в другом действии, например здесь.
Компресс!!
Распаковка !!
источник
Буфер транзакции Binder имеет ограниченный фиксированный размер, в настоящее время 1 МБ, который используется всеми транзакциями, выполняемыми для процесса. Следовательно, это исключение может быть вызвано, когда выполняется много транзакций, даже если большинство отдельных транзакций имеют средний размер.
обратитесь по этой ссылке
источник
Смотрите мой ответ в этой теме.
intent.putExtra("Some string",very_large_obj_for_binder_buffer);
Вы превышаете буфер транзакции связующего из-за переноса больших элементов из одного действия в другое.
источник
Я решил эту проблему, сохранив изображения во внутреннем хранилище, а затем используя .setImageURI (), а не .setBitmap ().
источник
Правильный подход - использовать
setImageViewUri()
(медленнее) илиsetImageViewBitmap()
и воссоздаватьRemoteView
каждый раз, когда вы обновляете уведомление.источник