Skip to content

Commit 9063f6c

Browse files
committed
Call trim/lowMemory in request manager fragments.
1 parent a2e6e60 commit 9063f6c

File tree

5 files changed

+76
-1
lines changed

5 files changed

+76
-1
lines changed

library/src/androidTest/java/com/bumptech/glide/manager/RequestManagerFragmentTest.java

+38
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22

33
import static org.junit.Assert.assertEquals;
44
import static org.mockito.Matchers.any;
5+
import static org.mockito.Matchers.eq;
56
import static org.mockito.Mockito.mock;
67
import static org.mockito.Mockito.never;
78
import static org.mockito.Mockito.verify;
89

910
import android.app.Activity;
11+
import android.content.ComponentCallbacks;
1012
import android.support.v4.app.FragmentActivity;
1113

1214
import com.bumptech.glide.RequestManager;
@@ -103,6 +105,30 @@ public void runTest(Harness harness) {
103105
});
104106
}
105107

108+
@Test
109+
public void testCallsRequestManagerOnLowMemory() {
110+
runTest(new TestCase() {
111+
@Override
112+
public void runTest(Harness harness) {
113+
RequestManager requestManager = mock(RequestManager.class);
114+
harness.setRequestManager(requestManager);
115+
harness.getCallbacks().onLowMemory();
116+
verify(requestManager).onLowMemory();
117+
}
118+
});
119+
}
120+
121+
@Test
122+
public void testNonSupportFragmentCallsRequestManagerOnTrimMemory() {
123+
RequestManagerHarness requestManagerHarness = new RequestManagerHarness();
124+
RequestManager requestManager = mock(RequestManager.class);
125+
requestManagerHarness.setRequestManager(requestManager);
126+
int level = 123;
127+
requestManagerHarness.fragment.onTrimMemory(level);
128+
129+
verify(requestManager).onTrimMemory(eq(level));
130+
}
131+
106132
private void runTest(TestCase testCase) {
107133
for (Harness harness : harnesses) {
108134
try {
@@ -127,6 +153,8 @@ private interface Harness {
127153
public ActivityFragmentLifecycle getFragmentLifecycle();
128154

129155
public ActivityController getController();
156+
157+
public ComponentCallbacks getCallbacks();
130158
}
131159

132160
private static class RequestManagerHarness implements Harness {
@@ -174,6 +202,11 @@ public ActivityFragmentLifecycle getFragmentLifecycle() {
174202
public ActivityController getController() {
175203
return controller;
176204
}
205+
206+
@Override
207+
public ComponentCallbacks getCallbacks() {
208+
return fragment;
209+
}
177210
}
178211

179212
private static class SupportRequestManagerHarness implements Harness {
@@ -222,5 +255,10 @@ public ActivityFragmentLifecycle getFragmentLifecycle() {
222255
public ActivityController getController() {
223256
return supportController;
224257
}
258+
259+
@Override
260+
public ComponentCallbacks getCallbacks() {
261+
return supportFragment;
262+
}
225263
}
226264
}

library/src/main/java/com/bumptech/glide/Glide.java

+1
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,7 @@ public void preFillBitmapPool(PreFillType.Builder... bitmapAttributeBuilders) {
346346
/**
347347
* Clears as much memory as possible.
348348
*
349+
* @see android.content.ComponentCallbacks#onLowMemory()
349350
* @see android.content.ComponentCallbacks2#onLowMemory()
350351
*/
351352
public void clearMemory() {

library/src/main/java/com/bumptech/glide/RequestManager.java

+21-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.bumptech.glide;
22

3+
import android.annotation.SuppressLint;
4+
import android.content.ComponentCallbacks2;
35
import android.content.Context;
6+
import android.content.res.Configuration;
47
import android.net.Uri;
58
import android.os.Handler;
69
import android.os.Looper;
@@ -39,7 +42,9 @@
3942
* @see Glide#with(android.support.v4.app.Fragment)
4043
* @see Glide#with(Context)
4144
*/
42-
public class RequestManager implements LifecycleListener {
45+
// It's safe to implement ComponentCallbacks2.
46+
@SuppressLint("NewApi")
47+
public class RequestManager implements LifecycleListener, ComponentCallbacks2 {
4348
private final Context context;
4449
private final Lifecycle lifecycle;
4550
private final RequestTracker requestTracker;
@@ -78,6 +83,21 @@ public void run() {
7883
lifecycle.addListener(connectivityMonitor);
7984
}
8085

86+
@Override
87+
public void onTrimMemory(int level) {
88+
glide.trimMemory(level);
89+
}
90+
91+
@Override
92+
public void onConfigurationChanged(Configuration newConfig) {
93+
// Do nothing.
94+
}
95+
96+
@Override
97+
public void onLowMemory() {
98+
glide.clearMemory();
99+
}
100+
81101
/**
82102
* An interface that allows a default set of options to be applied to all requests started from an
83103
* {@link com.bumptech.glide.RequestManager}.

library/src/main/java/com/bumptech/glide/manager/RequestManagerFragment.java

+10
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,14 @@ public void onDestroy() {
6868
super.onDestroy();
6969
lifecycle.onDestroy();
7070
}
71+
72+
@Override
73+
public void onTrimMemory(int level) {
74+
requestManager.onTrimMemory(level);
75+
}
76+
77+
@Override
78+
public void onLowMemory() {
79+
requestManager.onLowMemory();
80+
}
7181
}

library/src/main/java/com/bumptech/glide/manager/SupportRequestManagerFragment.java

+6
Original file line numberDiff line numberDiff line change
@@ -65,4 +65,10 @@ public void onDestroy() {
6565
super.onDestroy();
6666
lifecycle.onDestroy();
6767
}
68+
69+
@Override
70+
public void onLowMemory() {
71+
super.onLowMemory();
72+
requestManager.onLowMemory();
73+
}
6874
}

0 commit comments

Comments
 (0)