diff options
| -rw-r--r-- | src/com/android/gallery3d/app/AbstractGalleryActivity.java | 11 | ||||
| -rw-r--r-- | src/com/android/gallery3d/app/Gallery.java | 12 | ||||
| -rw-r--r-- | src/com/android/gallery3d/util/SpinnerVisibilitySetter.java | 14 |
3 files changed, 21 insertions, 16 deletions
diff --git a/src/com/android/gallery3d/app/AbstractGalleryActivity.java b/src/com/android/gallery3d/app/AbstractGalleryActivity.java index 9a1d3d300..899e9bfa4 100644 --- a/src/com/android/gallery3d/app/AbstractGalleryActivity.java +++ b/src/com/android/gallery3d/app/AbstractGalleryActivity.java @@ -181,6 +181,17 @@ public class AbstractGalleryActivity extends Activity implements GalleryActivity } @Override + protected void onDestroy() { + super.onDestroy(); + mGLRootView.lockRenderThread(); + try { + getStateManager().destroy(); + } finally { + mGLRootView.unlockRenderThread(); + } + } + + @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { mGLRootView.lockRenderThread(); try { diff --git a/src/com/android/gallery3d/app/Gallery.java b/src/com/android/gallery3d/app/Gallery.java index e3937bcd0..60eb069fa 100644 --- a/src/com/android/gallery3d/app/Gallery.java +++ b/src/com/android/gallery3d/app/Gallery.java @@ -245,18 +245,6 @@ public final class Gallery extends AbstractGalleryActivity implements OnCancelLi } @Override - public void onDestroy() { - super.onDestroy(); - GLRoot root = getGLRoot(); - root.lockRenderThread(); - try { - getStateManager().destroy(); - } finally { - root.unlockRenderThread(); - } - } - - @Override protected void onResume() { Utils.assertTrue(getStateManager().getStateCount() > 0); super.onResume(); diff --git a/src/com/android/gallery3d/util/SpinnerVisibilitySetter.java b/src/com/android/gallery3d/util/SpinnerVisibilitySetter.java index 6ccc26460..1e0534e90 100644 --- a/src/com/android/gallery3d/util/SpinnerVisibilitySetter.java +++ b/src/com/android/gallery3d/util/SpinnerVisibilitySetter.java @@ -21,6 +21,7 @@ import android.os.Handler; import android.os.Message; import android.os.SystemClock; +import java.lang.ref.WeakReference; import java.util.WeakHashMap; /** @@ -47,25 +48,29 @@ public class SpinnerVisibilitySetter { new WeakHashMap<Activity, SpinnerVisibilitySetter>(); private long mSpinnerVisibilityStartTime = -1; - private Activity mActivity; + private WeakReference<Activity> mActivityRef; private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { + Activity activity = mActivityRef.get(); + switch(msg.what) { case MSG_SHOW_SPINNER: removeMessages(MSG_SHOW_SPINNER); + if (activity == null) break; if (mSpinnerVisibilityStartTime >= 0) break; mSpinnerVisibilityStartTime = SystemClock.elapsedRealtime(); - mActivity.setProgressBarIndeterminateVisibility(true); + activity.setProgressBarIndeterminateVisibility(true); break; case MSG_HIDE_SPINNER: removeMessages(MSG_HIDE_SPINNER); + if (activity == null) break; if (mSpinnerVisibilityStartTime < 0) break; long t = SystemClock.elapsedRealtime() - mSpinnerVisibilityStartTime; if (t >= MIN_SPINNER_DISPLAY_TIME) { mSpinnerVisibilityStartTime = -1; - mActivity.setProgressBarIndeterminateVisibility(false); + activity.setProgressBarIndeterminateVisibility(false); } else { sendEmptyMessageDelayed(MSG_HIDE_SPINNER, MIN_SPINNER_DISPLAY_TIME - t); } @@ -91,7 +96,8 @@ public class SpinnerVisibilitySetter { } private SpinnerVisibilitySetter(Activity activity) { - mActivity = activity; + // Activity are keys. Value objects should not strongly refer to keys. + mActivityRef = new WeakReference<Activity>(activity); } public void setSpinnerVisibility(boolean visible) { |
