Я использую библиотеку itext для создания pdf изображений и текста. Следующий код работает нормально на 3 из 4 устройств, но на 4-м устройстве я получаю OutOfMemoryException. Код запускается внутри метода doinbackground AsyncTask, он проверяет вращение каждого файла jpg (каталог файлов с SD-карты) с использованием объекта bimtmap, измеряя ширину по высоте и поворачивая объект itext Image 90degrees, если это необходимо.Android itext pdf library OutOfMemoryError
try {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(
Environment.getExternalStorageDirectory()
+ "/doc" + documentID + ".pdf"));
document.open();
document.setMargins(0f, 0f, 0f, 0f);
document.add(new Paragraph(documentNameEt.getText().toString()));
document.add(new Paragraph(makeUserDeets()));
Bitmap b = null;
Image image = null;
Rectangle r = document.getPageSize();
for (String d : paths[0]) {
Log.d("senddataobj", d);
image = Image.getInstance(d);
b = BitmapFactory.decodeFile(d);
if (b.getWidth() > b.getHeight()) {
image.setRotationDegrees(90);
Log.d(d, "rotating");
}
b.recycle();
image.scaleToFit(r.getWidth(), r.getHeight());
document.add(image);
}
document.close();
} catch (Exception ex) {
ex.printStackTrace();
}
java.lang.RuntimeException: Произошла ошибка при выполнении doInBackground() в android.os.AsyncTask $ 3.done (AsyncTask.java:278) в java.util.concurrent.FutureTask $ Sync.innerSetException (FutureTask.java:273) at java.util.concurrent.FutureTask.setException (FutureTask.java:124) at java.util.concurrent.FutureTask $ Sync.innerRun (FutureTask.java:307) at java.util.concurrent.FutureTask.run (FutureTask.java:137) в android.os.AsyncTask $ SerialExecutor $ 1.run (AsyncTask.java:208) в java.util.concurrent.ThreadP oolExecutor.runWorker (ThreadPoolExecutor.java:1076) at java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:569) at java.lang.Thread.run (Thread.java:856) Причиняется: java.lang.OutOfMemoryError на android.graphics.BitmapFactory.nativeDecodeStream (нативный метод) при android.graphics.BitmapFactory.decodeStream (BitmapFactory.java:493) в android.graphics.BitmapFactory.decodeFile (BitmapFactory.java:299) в android.graphics.BitmapFactory.decodeFile (BitmapFactory.java:324) в com.wake.snapshot.CreateDocumentActivity $ CreateAndSendPdf.doInBackground (CreateDocumentActivity.java:315) в com.wake.up.your.wealth. snapshot.CreateDocume ntActivity $ CreateAndSendPdf.doInBackground (CreateDocumentActivity.java:1) на android.os.AsyncTask $ 2.call (AsyncTask.java:264) на java.util.concurrent.FutureTask $ Sync.innerRun (FutureTask.java.305). .. 5 более
Насколько велики изображения (размеры)? Возможно, у вас действительно закончилась нехватка памяти. Рассматривали ли вы сборку изображения документа по изображению вместо того, чтобы хранить все в памяти? – dmon
Спасибо, я использовал класс options для получения нулевого объекта растрового изображения с размерами, а затем использовал тусклые объекты в объекте options. – brux