From: David A. Velasco Date: Wed, 10 Dec 2014 11:46:34 +0000 (+0100) Subject: Cancel load task when fragment becomes invisible (fixes crash in rotations) X-Git-Tag: oc-android-1.7.0_signed~81^2~2 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/77554b2b5156c00ac230071f8bfe32039c5b4a29?ds=inline;hp=--cc Cancel load task when fragment becomes invisible (fixes crash in rotations) --- 77554b2b5156c00ac230071f8bfe32039c5b4a29 diff --git a/src/com/owncloud/android/ui/preview/PreviewImageFragment.java b/src/com/owncloud/android/ui/preview/PreviewImageFragment.java index 505a3260..0995793d 100644 --- a/src/com/owncloud/android/ui/preview/PreviewImageFragment.java +++ b/src/com/owncloud/android/ui/preview/PreviewImageFragment.java @@ -83,6 +83,8 @@ public class PreviewImageFragment extends FileFragment { private static final String TAG = PreviewImageFragment.class.getSimpleName(); private boolean mIgnoreFirstSavedState; + + private LoadBitmapTask mLoadBitmapTask = null; /** @@ -191,12 +193,22 @@ public class PreviewImageFragment extends FileFragment { public void onStart() { super.onStart(); if (getFile() != null) { - BitmapLoader bl = new BitmapLoader(mImageView, mMessageView, mProgressWheel); - bl.execute(new String[]{getFile().getStoragePath()}); + mLoadBitmapTask = new LoadBitmapTask(mImageView, mMessageView, mProgressWheel); + mLoadBitmapTask.execute(new String[]{getFile().getStoragePath()}); } } + @Override + public void onStop() { + super.onStop(); + if (mLoadBitmapTask != null) { + mLoadBitmapTask.cancel(true); + mLoadBitmapTask = null; + } + + } + /** * {@inheritDoc} */ @@ -330,7 +342,7 @@ public class PreviewImageFragment extends FileFragment { } - private class BitmapLoader extends AsyncTask { + private class LoadBitmapTask extends AsyncTask { /** * Weak reference to the target {@link ImageView} where the bitmap will be loaded into. @@ -366,7 +378,7 @@ public class PreviewImageFragment extends FileFragment { * * @param imageView Target {@link ImageView} where the bitmap will be loaded into. */ - public BitmapLoader(ImageViewCustom imageView, TextView messageView, ProgressBar progressWheel) { + public LoadBitmapTask(ImageViewCustom imageView, TextView messageView, ProgressBar progressWheel) { mImageViewRef = new WeakReference(imageView); mMessageViewRef = new WeakReference(messageView); mProgressWheelRef = new WeakReference(progressWheel); @@ -380,6 +392,8 @@ public class PreviewImageFragment extends FileFragment { String storagePath = params[0]; try { + if (isCancelled()) return result; + File picture = new File(storagePath); if (picture != null) { @@ -389,6 +403,8 @@ public class PreviewImageFragment extends FileFragment { (new BufferedInputStream(new FileInputStream(picture)))); } + if (isCancelled()) return result; + if (result == null) { mErrorMessageId = R.string.preview_image_error_unknown_format; Log_OC.e(TAG, "File could not be loaded as a bitmap: " + storagePath); @@ -400,6 +416,8 @@ public class PreviewImageFragment extends FileFragment { } catch (OutOfMemoryError e) { Log_OC.e(TAG, "Out of memory occured for file " + storagePath, e); + if (isCancelled()) return result; + // If out of memory error when loading or rotating image, try to load it scaled result = loadScaledImage(storagePath); @@ -426,6 +444,13 @@ public class PreviewImageFragment extends FileFragment { } @Override + protected void onCancelled(Bitmap result) { + if (result != null) { + result.recycle(); + } + } + + @Override protected void onPostExecute(Bitmap result) { hideProgressWheel(); if (result != null) { @@ -434,7 +459,7 @@ public class PreviewImageFragment extends FileFragment { showErrorMessage(); } } - + @SuppressLint("InlinedApi") private void showLoadedImage(Bitmap result) { if (mImageViewRef != null) {