Clear ThreadLocal storage from Choreographer

Change-Id: I5abb5c68a635e7808b0a036ba4d9971cd0139aa3
This commit is contained in:
Deepanshu Gupta
2016-04-06 11:32:36 -07:00
parent 91253ed046
commit 61ccc9198a
2 changed files with 17 additions and 0 deletions

View File

@@ -15,8 +15,11 @@
*/
package android.view;
import com.android.ide.common.rendering.api.LayoutLog;
import com.android.layoutlib.bridge.Bridge;
import com.android.tools.layoutlib.annotations.LayoutlibDelegate;
import java.lang.reflect.Field;
import java.util.concurrent.atomic.AtomicReference;
/**
@@ -64,4 +67,17 @@ public class Choreographer_Delegate {
thisChoreographer.doCallbacks(Choreographer.CALLBACK_COMMIT, frameTimeNanos);
}
public static void dispose() {
try {
Field threadInstanceField = Choreographer.class.getDeclaredField("sThreadInstance");
@SuppressWarnings("unchecked") ThreadLocal<Choreographer> threadInstance =
(ThreadLocal<Choreographer>) threadInstanceField.get(null);
threadInstance.remove();
} catch (ReflectiveOperationException e) {
assert false;
Bridge.getLog().error(LayoutLog.TAG_BROKEN,
"Unable to clear Choreographer memory.", e, null);
}
}
}

View File

@@ -1434,6 +1434,7 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {
if (createdLooper) {
Bridge.cleanupThread();
Choreographer_Delegate.dispose();
}
}
}