π #2650 Removed accidental usage of SettableFuture, a WorkManager internal class, which will be removed in a future release of WorkManager. After updating WorkManager to that future release, all versions of LeakCanary from 2.8 to 2.13 will crash on leak analysis. To avoid a nasty surprise in the near future, update to LeakCanary 2.14.
π¨ #2660 Add proguard mapping support for LeakCanary release.
π #2531 Heap dump & leak lists not preserving list position when navigating.
π₯ #2643 Fixed rare crash on RenderHeapDumpScreen.
Version 3.0 Alpha 1 (2024-01-09)
This alpha release marks the start of the work on LeakCanary 3. It's not stable! While I intend to rework some APIs, I also want to minimize migration work. The best way to ensure migrations will go smoothly is to try upgrading to a 3.0 alpha and to let me know if you get any compile or runtime error.
Heap Growth
New APIs, not stable yet: the shark-heap-growth artifact contains APIs for writing test scenarios that detect repeated heap growth.
Here's how it's used with an Espresso test:
class MyEspressoTest {
@βTest
fun greeter_says_hello_does_not_leak() {
// Runs in a loop until the heap stops growing or we reach max heap dumps.
val heapTraversal = HeapGrowthDetector.detectRepeatedHeapGrowth {
// Runs repeatedly until the heap stops growing or we reach maxHeapDumps.
onView(withId(R.id.name_field)).perform(typeText("Steve"))
onView(withId(R.id.greet_button)).perform(click())
onView(withText("Hello Steve!")).check(matches(isDisplayed()))
}
assertThat(heapTraversal.growingNodes).isEmpty()
}
}
Here's an example set up, this is all very manual for now.
You can trigger a rebase of this PR by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Bumps com.squareup.leakcanary:leakcanary-android from 2.12 to 2.14.
Release notes
Sourced from com.squareup.leakcanary:leakcanary-android's releases.
Changelog
Sourced from com.squareup.leakcanary:leakcanary-android's changelog.
... (truncated)
Commits
8d29638
Prepare 2.14 release87e6134
Merge pull request #2660 from square/py/release_mapping_lc211bc9a6
Add proguard mapping support for LeakCanary releasea9da75e
Merge pull request #2658 from square/py/backports_30509b3e
Merge pull request #2657 from square/py/stop_using_work_manager_internals_lc23a312c7
Fix crash reading Canvas size from IO thread3968bee
Add known UiModeManager memory leak from Android OS0cfd00a
Allow async restoring of view state60ad107
Stop using WorkManager internals3c71194
Merge pull request #2615 from daio/PermissionControllerManager_leak_2You can trigger a rebase of this PR by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show