Stop torrent status polling from outliving its screen#478
Open
ElCruncharino wants to merge 1 commit into
Open
Conversation
TorrentDetailsViewModel.pollTorrentStatus and TorrentProcessingViewModel.startSelectionLoop each built their own CoroutineScope backed by a plain Job, completely separate from the ViewModel lifecycle. When the user navigated away before the loop's own stop condition fired, the coroutine kept running because nothing ever cancelled it (there is no onCleared override anywhere in the codebase). Both loops now launch on viewModelScope instead, so clearing the ViewModel cancels them automatically. The job field is kept as a nullable handle purely so a new call can cancel a previous in-flight loop and so the loop can stop itself once the tracked status reaches an end state, same as before.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
TorrentDetailsViewModel and TorrentProcessingViewModel each created their own CoroutineScope for polling torrent status instead of using viewModelScope, and nothing ever cancelled it if you navigated away before the polling loop's own stop condition was reached. That left it polling the API in the background indefinitely, using battery and data with no way for the user to know why. Switched both to viewModelScope, which gets cancelled automatically when the screen is left.