@Override
public void onStop() {
- super.onStop();
+ Log_OC.d(TAG, "onStop starts");
if (mLoadBitmapTask != null) {
mLoadBitmapTask.cancel(true);
mLoadBitmapTask = null;
}
-
+ super.onStop();
}
/**
if (mBitmap != null) {
mBitmap.recycle();
System.gc();
+ // putting this in onStop() is just the same; the fragment is always destroyed by the ViewPager
+ // when swipes further than the valid offset, and onStop() is never called before than that
}
super.onDestroy();
}
Bitmap result = null;
if (params.length != 1) return result;
String storagePath = params[0];
+ InputStream is = null;
try {
if (isCancelled()) return result;
File picture = new File(storagePath);
if (picture != null) {
- // Decode file into a bitmap in real size for being able to make zoom on
- // the image
- result = BitmapFactory.decodeStream(new FlushedInputStream
- (new BufferedInputStream(new FileInputStream(picture))));
+ // Decode file into a bitmap in real size for being able to make zoom on the image
+ is = new FlushedInputStream(new BufferedInputStream(new FileInputStream(picture)));
+ result = BitmapFactory.decodeStream(is);
}
if (isCancelled()) return result;
}
} catch (OutOfMemoryError e) {
- Log_OC.e(TAG, "Out of memory occured for file " + storagePath, e);
+ Log_OC.w(TAG, "Out of memory rendering file " + storagePath + " in full size; scaling down");
if (isCancelled()) return result;
mErrorMessageId = R.string.common_error_unknown;
Log_OC.e(TAG, "Unexpected error loading " + getFile().getStoragePath(), t);
+ } finally {
+ if (is != null) {
+ try {
+ is.close();
+ } catch (IOException e) {
+ Log_OC.e(TAG, "Unexpected exception closing stream; trying to continue ", e);
+ }
+ }
}
return result;
} else {
showErrorMessage();
}
+ if (mBitmap != null && mBitmap != result) {
+ // unused bitmap, release it! (just in case)
+ result.recycle();
+ }
}
@SuppressLint("InlinedApi")
if (mImageViewRef != null) {
final ImageViewCustom imageView = mImageViewRef.get();
if (imageView != null) {
- imageView.setBitmap(result);
imageView.setImageBitmap(result);
imageView.setVisibility(View.VISIBLE);
- mBitmap = result;
- } // else , silently finish, the fragment was destroyed
+ mBitmap = result; // needs to be kept for recycling when not useful
+ }
}
if (mMessageViewRef != null) {
final TextView messageView = mMessageViewRef.get();