1111
1212import javax .annotation .Nullable ;
1313
14- import java .util .List ;
1514import java .util .HashMap ;
15+ import java .util .List ;
1616import java .util .Map ;
1717
18+ import android .content .ComponentCallbacks2 ;
19+ import android .content .res .Configuration ;
20+
1821import com .facebook .common .logging .FLog ;
1922import com .facebook .react .animation .Animation ;
2023import com .facebook .react .bridge .Callback ;
@@ -78,6 +81,7 @@ public class UIManagerModule extends ReactContextBaseJavaModule implements
7881 private final EventDispatcher mEventDispatcher ;
7982 private final Map <String , Object > mModuleConstants ;
8083 private final UIImplementation mUIImplementation ;
84+ private final MemoryTrimCallback mMemoryTrimCallback = new MemoryTrimCallback ();
8185
8286 private int mNextRootViewTag = 1 ;
8387 private int mBatchId = 0 ;
@@ -114,6 +118,11 @@ public Map<String, Object> getConstants() {
114118 return mModuleConstants ;
115119 }
116120
121+ @ Override
122+ public void initialize () {
123+ getReactApplicationContext ().registerComponentCallbacks (mMemoryTrimCallback );
124+ }
125+
117126 @ Override
118127 public void onHostResume () {
119128 mUIImplementation .onHostResume ();
@@ -133,6 +142,9 @@ public void onHostDestroy() {
133142 public void onCatalystInstanceDestroy () {
134143 super .onCatalystInstanceDestroy ();
135144 mEventDispatcher .onCatalystInstanceDestroyed ();
145+
146+ getReactApplicationContext ().unregisterComponentCallbacks (mMemoryTrimCallback );
147+ CSSNodePool .get ().clear ();
136148 }
137149
138150 private static Map <String , Object > createConstants (List <ViewManager > viewManagerList ) {
@@ -549,4 +561,25 @@ public void addUIBlock (UIBlock block) {
549561 public int resolveRootTagFromReactTag (int reactTag ) {
550562 return mUIImplementation .resolveRootTagFromReactTag (reactTag );
551563 }
564+
565+ /**
566+ * Listener that drops the CSSNode pool on low memory when the app is backgrounded.
567+ */
568+ private class MemoryTrimCallback implements ComponentCallbacks2 {
569+
570+ @ Override
571+ public void onTrimMemory (int level ) {
572+ if (level >= TRIM_MEMORY_MODERATE ) {
573+ CSSNodePool .get ().clear ();
574+ }
575+ }
576+
577+ @ Override
578+ public void onConfigurationChanged (Configuration newConfig ) {
579+ }
580+
581+ @ Override
582+ public void onLowMemory () {
583+ }
584+ }
552585}
0 commit comments