Fix ContextImpl leak in ActivityThread.
ActivityThread caches system ui contexts per display,
but never removes them when the corresponding displays
are removed.
This is especially problematic with VirtualDisplay-s and ActivityThread
instance used in system server.
This cl modifies the cache to use WeakRef and allow instances to
be garbage collected.
Also, since the context can be moved between the displays, it's possible
that the cached instance doesn't correspond to the display in the
SparseArray key at the moment it's fetched.
This cl stores the instances in the simple array list
(The number of instances at the same time should be low, and we
would anyway need to traverse the whole SparseArray to check for
moved instances).
Bug: 330472805
Test: verifying heapdump after atest CtsVirtualDevicesAppLaunchTestCases --iterations 10
Change-Id: I8811945560381653cac8363d4086f87d253e22db
1 file changed