Fixed
Status Update
Comments
jb...@google.com <jb...@google.com>
ap...@google.com <ap...@google.com> #2
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 9fe209b0b6489fc3eba5be3c646beaf0efe8ed7e
Author: Jeremy Woods <jbwoods@google.com>
Date: Tue Aug 25 11:55:49 2020
Remove observers when unregistering ActivityResult
Currently, if you register an ActivityResult using a LifecycleOwner and
then go through process death, we add an Observer to fire the registered
callback once the lifecycle goes to STARTED. In the case of
unregistering, we should make sure to remove any observers that may have
been added.
Test: Added ActivityResultRegistryTest#testLifecycleOwnerCallbackUnregistered
Bug: 165608393
Change-Id: If81142b1a6abc72b105986a2460e4aeb96e29eaf
M activity/activity/src/androidTest/java/androidx/activity/result/ActivityResultRegistryTest.kt
M activity/activity/src/main/java/androidx/activity/result/ActivityResultRegistry.java
https://android-review.googlesource.com/1410730
Branch: androidx-master-dev
commit 9fe209b0b6489fc3eba5be3c646beaf0efe8ed7e
Author: Jeremy Woods <jbwoods@google.com>
Date: Tue Aug 25 11:55:49 2020
Remove observers when unregistering ActivityResult
Currently, if you register an ActivityResult using a LifecycleOwner and
then go through process death, we add an Observer to fire the registered
callback once the lifecycle goes to STARTED. In the case of
unregistering, we should make sure to remove any observers that may have
been added.
Test: Added ActivityResultRegistryTest#testLifecycleOwnerCallbackUnregistered
Bug: 165608393
Change-Id: If81142b1a6abc72b105986a2460e4aeb96e29eaf
M activity/activity/src/androidTest/java/androidx/activity/result/ActivityResultRegistryTest.kt
M activity/activity/src/main/java/androidx/activity/result/ActivityResultRegistry.java
pr...@google.com <pr...@google.com> #3
This has been fixed internally and will be available in the next release of Fragments.
ty...@gmail.com <ty...@gmail.com> #4
Update
Description
Version used: 1.7.0
Devices/Android versions reproduced on: API 33
If this is a bug in the library, we would appreciate if you could attach:
Example project attached
Description:
It appears that ComponentActivity$ReportFullyDrawnExecutorApi16Impl.this$0 leaks memory when used in an ActivityScenario if the ActivityScenario is used to recreate the Activity soon after the Activity has been launched.
Reproduction steps:
1. Create an Activity that extends ComponentActivity
2. Set a content view for the Activity in the onCreate using either setContentView(View) or setContent { <Composable> }
3. Create an instrumented test that uses LeakCanary's DetectLeaksAfterTestSuccess Test Rule
4. In the test: Launch the Activity using ActivityScenario, and then call "recreate" on the ActivityScenario
5a. Expected result: The test launches the Activity, recreates it, and the test passes.
5b. Actual result: The test launches the Activity, recreates it, and then LeakCanary detects a memory leak from ComponentActivity$ReportFullyDrawnExecutorApi16Impl.this$0 leaking an instance of the Activity.
This issue does not occur for ComponentActivity instance that do not set a content view in onCreate, and does not occur for regular android.app.Activity instances.
I have attached an example project with eight instrumented tests that show case this issue. In the ExampleInstrumentedTest.kt tests `launchExampleViewActivityAndRecreate` and `launchExampleComposeActivityAndRecreate` both fail, and all other tests succeed. The expected behaviour is that all tests should pass.