Fix memory leak which due to GalleryView.onDetachFromRootInternal not called

This commit is contained in:
seven332 committed 2016-04-04 15:20:26 +08:00
1 parent cdc8a7aea6
commit 9a87701ad6
4 files changed
+3 -90

No files matched your search

@@ -88,9 +88,6 @@ public class GalleryView extends GLView implements GestureRecognizer.Listener {
private static final int METHOD_SET_SCALE_MODE = 18;
private static final int METHOD_SET_START_POSITION = 19;
private static final int METHOD_ON_ATTACH_TO_ROOT = 20;
private static final int METHOD_ON_DETACH_FROM_ROOT = 21;
private static final int METHOD_PAUSE = 22;
private static final int METHOD_RESUME = 23;
private final Context mContext;
private MovableTextTexture mPageTextTexture;
@@ -248,40 +245,17 @@ public class GalleryView extends GLView implements GestureRecognizer.Listener {
postMethod(METHOD_ON_ATTACH_TO_ROOT);
}
private void onDetachFromRootInternal() {
@Override
public void onDetachFromRoot() {
// When detached, render() will not be called. So do it here
detachLayoutManager();
if (null != mPageTextTexture) {
mPageTextTexture.recycle();
mPageTextTexture = null;
}
}
@Override
public void onDetachFromRoot() {
super.onDetachFromRoot();
mEdgeView.onDetachFromRoot();
postMethod(METHOD_ON_DETACH_FROM_ROOT);
}
private void pauseInternal() {
mPause = true;
}
public void pause() {
postMethod(METHOD_PAUSE);
}
private void resumeInternal() {
if (mPause) {
mPause = false;
if (null != mLayoutManager) {
mLayoutManager.bindUnloadedPage();
}
}
}
public void resume() {
postMethod(METHOD_RESUME);
}
@LayoutMode
@@ -788,15 +762,6 @@ public class GalleryView extends GLView implements GestureRecognizer.Listener {
case METHOD_ON_ATTACH_TO_ROOT:
onAttachToRootInternal();
break;
case METHOD_ON_DETACH_FROM_ROOT:
onDetachFromRootInternal();
break;
case METHOD_PAUSE:
pauseInternal();
break;
case METHOD_RESUME:
resumeInternal();
break;
}
}
@@ -980,8 +945,6 @@ public class GalleryView extends GLView implements GestureRecognizer.Listener {
public abstract void onDataChanged();
public abstract void bindUnloadedPage();
public abstract void onPageLeft();
public abstract void onPageRight();
@@ -716,23 +716,6 @@ public class PagerLayoutManager extends GalleryView.LayoutManager {
mGalleryView.requestFill();
}
@Override
public void bindUnloadedPage() {
if (null == mAdapter) {
return;
}
if (null != mCurrent && !mCurrent.getImageView().isLoaded()) {
mAdapter.bind(mCurrent, mIndex);
}
if (null != mPrevious && !mPrevious.getImageView().isLoaded()) {
mAdapter.bind(mPrevious, mIndex - 1);
}
if (null != mNext && !mNext.getImageView().isLoaded()) {
mAdapter.bind(mNext, mIndex + 1);
}
}
@Override
public void onPageLeft() {
int size = mAdapter.size();
@@ -844,21 +844,6 @@ public class ScrollLayoutManager extends GalleryView.LayoutManager {
mGalleryView.requestFill();
}
@Override
public void bindUnloadedPage() {
if (null == mAdapter || mPages.size() <= 0) {
return;
}
int index = mIndex;
for (GalleryPageView page: mPages) {
if (!page.getImageView().isLoaded()) {
mAdapter.bind(page, index);
}
index++;
}
}
@Override
public void onPageLeft() {
int size = mAdapter.size();
@@ -351,24 +351,6 @@ public class GalleryActivity extends EhActivity
SimpleHandler.getInstance().removeCallbacks(mHideSliderRunnable);
}
@Override
protected void onPause() {
super.onPause();
if (null != mGalleryView) {
mGalleryView.pause();
}
}
@Override
protected void onResume() {
super.onResume();
if (null != mGalleryView) {
mGalleryView.resume();
}
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);