У меня была та же проблема, и я попробовал три разных способа удалить изображение. Иногда это работало, иногда это не так. После слишком большого количества времени, проведенного сейчас, каждый метод, который у меня есть, удалит изображение. Я хочу сказать следующее: БУДЬТЕ ОСТОРОЖНЫ С ОБРАБОТКОЙ BITMAP Я делал снимок, сохранял его, а затем поворачивал при необходимости:
public static Bitmap rotatePictureToPortraitMode(String filePath, Bitmap myBitmap) {
try {
ExifInterface exif = new ExifInterface(filePath);
int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1);
Log.d("EXIF", "Exif: " + orientation);
Matrix matrix = new Matrix();
if (orientation == 6) {
matrix.postRotate(90);
} else if (orientation == 3) {
matrix.postRotate(180);
} else if (orientation == 8) {
matrix.postRotate(270);
}
myBitmap = Bitmap.createBitmap(myBitmap, 0, 0, myBitmap.getWidth(), myBitmap.getHeight(), matrix, true); // rotating bitmap
} catch (Exception e) {
}
return myBitmap;
}
после этого я пытался удалить изображение, но, как я уже говорил ранее, оно не работало. Удаление этого метода помогло мне решить проблему.
Может быть, это была только моя проблема, но как только я удалил это, это мне очень помогло, поэтому я хочу сказать осторожно, как вы обрабатываете изображение. Для моего случая я использовал ответ, который упоминался ранее:
File file = new File(photoUri);
file.delete();
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
Uri.fromFile(new File(photoUri))));
Надеюсь, это поможет!
Если вы выполняете операции с очередью в рамках транзакции, и происходит откат, то после разрешения транзакции очередь и сообщение появятся так же, как и до начала транзакции. Другими словами, никаких изменений вообще.
В сценарии большого объема, однако, типично иметь несколько транзакционных считывателей и записывающих устройств в одной очереди, и они не блокируют всю очередь для каждого удаления из очереди или постановки в очередь.
Эти средства чтения и записи будут вставлять элементы в очередь или выводить элементы из очереди транзакционным способом, пока выполняется ваша обреченная транзакция. В этом случае другие элементы очереди могут появиться или исчезнуть (или и то, и другое).
Если после отката исходной транзакции вы снова удаляете из очереди, вы можете получить исходное сообщение, но не можете. В большом объеме, сценарий с высоким уровнем параллелизма, возможно, что другой читатель извлечет сообщение до того, как ваш код сможет это сделать.
Откат оставляет сообщение в очереди и помещает его для повторной доставки.
Однако, когда (настраиваемый) предел попыток повторной доставки был достигнут, сообщение откладывается в «очередь недоставленных сообщений».
Типичным примером, когда это происходит, являются sc 'подозрительные сообщения': сообщения, с которыми невозможно справиться из-за фундаментальных и временных проблем (например, недопустимый формат, отсутствующие поля и т. Д.).
Поэтому, прежде чем выполнять откат (и помещать сообщение обратно в очередь), обязательно подумайте, является ли ошибка временной (например, разрывается соединение с серверной частью) или нет.
В последнем случае лучше проглотить сообщение и зарегистрировать ошибку или запустить другое предупреждение. В противном случае сообщение будет без необходимости потреблять как вычислительную мощность, так и инфраструктуру очереди.
Чтобы ответить на пару конкретных вопросов из этой беседы ...